Intereting Posts

Как вызвать функции wordpress в пользовательском скрипте php

У меня есть сценарий Php, который я хочу использовать для создания нового блога в WPMU. У меня возникли проблемы с вызовом функций wordpress, таких как wpmu_create_user и wpmu_create_blog .

Я надеюсь, что этот скрипт будет запущен как задание cron из командной строки и забрать новые запросы на создание блога из внешнего db, создать новый блог с помощью функций wordpress и обновить db с помощью новой информации о блоге.

Related of "Как вызвать функции wordpress в пользовательском скрипте php"

включая файл wp-load.php (в корневом каталоге вашей установки WordPress) в вашем файле сценария php, например,

require_once("/path/to/wordpress/wp-load.php"); 

вам придется предоставить abspath файла wp-load, теперь вы можете использовать все функции wordpress в своем php-скрипте

У меня есть универсальное решение, которое будет работать в любом php-файле внутри папки wp-content без каких-либо корректировок или вам нужно знать, что такое 'path/to/wordpress'

 require_once( explode( "wp-content" , __FILE__ )[0] . "wp-load.php" ); 

Он просто автоматически доходит до корня wordpress и загружает wp-load.php

Вы можете просто вставить его anywehre независимо от того, будет ли его плагин или файл темы, и он будет работать.

Я думаю, что такие вещи, как ../../../.. выглядит очень плохо, и когда вы изменяете структуру своих папок с темой / плагином, вы можете сходить с ума.


Примечание . Это решение предполагает, что вы не переименовали свою папку wp-content .

Для wordpress 3.1 мне пришлось указать хост / домен, потому что wp-includes / ms-settings.php: 100 нуждается в нем или он умирает. Таким образом, мой сценарий выглядит примерно так (обратите внимание, что я использую его для сетевого / многоблочного сайта):

 #!/usr/bin/php -q <?php #for multi-blog only $blog_id = 1; #specify host or domain (needed for wp-includes/ms-settings.php:100) $_SERVER[ 'HTTP_HOST' ] = 'localhost'; #location of wp-load.php so we have access to database and $wpdb object $wp_load_loc = "/path/to/wordpress/wp-load.php"; require_once($wp_load_loc); #for multi-blog only switch_to_blog($blog_id); #test to make sure we can access database echo $wpdb->prefix; ?> 

Это должно работать:

 require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); 

т.е. когда php-скрипт находится на одном сервере, а WP установлен в корне. Как и большинство случаев.

 require_once('../../../wp-load.php'); 

Я думаю, вы должны добавить эту строку перед любым использованием функции wordpress в своем пользовательском файле. и убедитесь, что у меня есть добавление ../ 3 раза по моей структуре установки wordpress. Это зависит от вашей проверки структуры вручную. ех. если ваш пользовательский файл находится внутри ваших тем / yourtheme / custom.php, то выше код будет работать отлично, а если нет, то добавьте ../ или удалите один или несколько ../ по вашему пути.

Ниже приведен код, который я использую:


 <?PHP require_once ('/path/to/wordpress/wp-load.php'); require_once ('/path/to/wordpress/wp-blog-header.php'); require_once ('/path/to/wordpress/wp-includes/registration.php'); do_action('wpmuadminedit', ''); //Code to Connect and Select the external database //Code to Connect to the external DB and get the new order details: NewBlogName=$name and AdminEmail=$email if ( !email_exists($email) ) { // email does exist, create a new user $name = create_name_from_email($email); $password = "use a default password"; $user_id=wpmu_create_user($name, $password, $email); create_blog($email, $title, $user_id, $password); } else { // user exists, create new blog $user_id=email_exists($email); $password = "use existing wordpress password"; create_blog($email, $title, $user_id, $password); } function create_name_from_email ($email) { preg_match('/[^@]+)@/',$email,$matches); $name = $matches[1]; return $name; } //Creates a new blog, expects user to already exist. function create_blog($email, $title, $user_id, $password) { //Code to Update external DB that the order is in process $public = array("public" => 1); if (constant('VHOST') == 'yes') { $newdomain = $domain . "." . $current_site->domain; $path = $base; } else { $newdomain = $current_site->domain; $path = $base . $domain . '/'; } $domain = strtolower($domain); $newdomain = strtolower($newdomain); $path = strtolower($path); $meta = apply_filters('signup_create_blog_meta', array('lang_id' => 1, $public)); $meta = apply_filters("add_singup_meta", $meta); wpmu_create_blog($newdomain, $path, $title, $user_id , $meta, $current_site->id); do_action('wpmu_activate_blog', $blog_id, $user_id, $password, $title, $meta); // Update external DB with BlogUrl, NewBlogName, AdminPassword, OrderStatus=Complete. mysql_close($con); ?> 

WordPress использует функцию phpass –

Это сработало для меня, поскольку у меня был пароль и хеш в таблице (мигрированные пользователи wp), и мне пришлось найти способ проверить регистрационные данные –

Захватите эту загрузку здесь – https://github.com/sunnysingh/phpass-starter

все, что вам нужно, – это базовая функция проверки текстового пароля на хэш-код WordPress:

 <?php require_once( "PasswordHash.php" ); $hasher = new PasswordHash(8, false); // Check that the password is correct $check = $hasher->CheckPassword($password, $stored_hash); if ($check) { // password good } else { // password wrong } ?> 

Все кредиты Санни Сингху!