35

我有一个 PHP 脚本,我想用它在 WPMU 中创建一个新博客。我在调用wpmu_create_userwpmu_create_blog等 WordPress 函数时遇到问题。

我的希望是让这个脚本从命令行作为cron作业运行,并从外部数据库中获取新的博客创建请求,使用 WordPress 功能创建一个新博客,并使用新的博客信息更新数据库。

4

7 回答 7

41

在您的 php 脚本文件中包含 wp-load.php 文件(在您的 wordpress 安装的根目录中),如下所示,

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

您必须提供 wp-load 文件的绝对路径,现在您可以在 php 脚本中使用 wordpress 的所有功能

于 2010-01-19T06:35:57.597 回答
31

我有一个通用的解决方案,可以在文件夹内的任何 PHP 文件中工作,无需任何调整或需要知道什么是神秘的wp-content'path/to/wordpress'

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

它只是自动上升到 WordPress 的根目录并加载wp-load.php

您可以将其粘贴到任何地方,无论它是插件还是主题文件,它都会起作用。

我认为像这样的东西../../../..看起来非常糟糕,当您修改主题或插件的文件夹结构时,您可能会发疯。


注意:此解决方案假定您没有重命名wp-content文件夹。

于 2014-08-11T09:36:04.927 回答
16

对于 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; 
?>
于 2011-03-28T04:54:07.660 回答
5

这应该有效:

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

即当 php 脚本在同一台服务器上并且 WP 安装在 root 上时。就像大多数情况一样。

于 2013-10-26T15:01:43.163 回答
2

以下是我正在使用的代码:


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

?>

于 2010-01-19T18:10:45.007 回答
1
require_once('../../../wp-load.php');

我认为您必须在自定义文件中使用 wordpress 功能之前添加此行。并确保我根据我的 wordpress 安装结构添加了 ../ 3 次。这取决于您手动检查的结构。前任。如果您的自定义文件在您的主题/yourtheme/custom.php 中,那么上面的代码将完美运行,如果没有,则根据您的路径添加 ../ 或删除一个或多个 ../。

于 2014-03-05T20:43:23.507 回答
1

WordPress 使用phpass函数。

这对我有用,因为我有密码和表中的哈希(迁移的 WordPress 用户),并且必须找到检查登录详细信息的方法。

在此处获取此下载 - 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

}

?>

全部归功于 Sunny Singh!

于 2016-06-01T09:23:00.717 回答