Как вызвать WordPress функции в пользовательском PHP-скрипте - PullRequest
33 голосов
/ 19 января 2010

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

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

Ответы [ 7 ]

41 голосов
/ 19 января 2010

включите файл wp-load.php (в корень вашей установки WordPress) в ваш файл php-скрипта следующим образом:

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

вам нужно будет указать abspath файла wp-load, теперь вы можете использовать все функции WordPress в вашем PHP-скрипте

28 голосов
/ 11 августа 2014

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

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

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

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

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


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

15 голосов
/ 28 марта 2011

Для 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; 
?>
5 голосов
/ 26 октября 2013

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

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

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

2 голосов
/ 06 марта 2014
require_once('../../../wp-load.php');

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

2 голосов
/ 19 января 2010

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


<?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);

?>

1 голос
/ 01 июня 2016

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

}

?>

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

...