如何在自定义 PHP 脚本中调用 WordPress 函数
Posted
技术标签:
【中文标题】如何在自定义 PHP 脚本中调用 WordPress 函数【英文标题】:How to call WordPress functions in a custom PHP script 【发布时间】:2011-01-06 16:26:05 【问题描述】:我有一个 php 脚本,我想用它在 WPMU 中创建一个新博客。我无法调用像 wpmu_create_user 和 wpmu_create_blog 这样的 WordPress 函数。
我希望这个脚本在命令行中作为cron 作业运行,并从外部数据库获取新的博客创建请求,使用 WordPress 功能创建新博客并使用新的博客信息更新数据库.
【问题讨论】:
你现在的代码是什么?我们真的需要看到一些东西才能诊断它。 Brian,请看下面的代码,水平线之间的所有内容都是我的代码。我不知道如何格式化它,所以它以特殊格式显示所有代码。 【参考方案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!
【讨论】:
【参考方案2】:我有一个通用的解决方案,可以在wp-content
文件夹内的任何 PHP 文件中使用 无需任何调整 或者需要知道什么是神秘的 'path/to/wordpress'
require_once(explode("wp-content", __FILE__)[0] . "wp-load.php");
它只是自动上升到 WordPress 的根目录并加载 wp-load.php。
无论是插件还是主题文件,您都可以将其粘贴到任何地方,并且可以正常工作。
我认为像../../../..
这样的东西看起来非常糟糕,当你修改主题或插件的文件夹结构时,你会发疯。
注意:此解决方案假定您没有重命名 wp-content
文件夹。
【讨论】:
这确实假设您没有重命名您的 wp-content 文件夹。很好的答案 没错,我会在我的答案中添加关于此的注释。 只需添加以下内容:include_once $_SERVER['DOCUMENT_ROOT'] 。 '/wp-load.php'; 如果你的wordpress不在root folder
里面怎么办?例如。 mywebsite.com/my/wordpress/dir
?
有用的答案:)【参考方案3】:
require_once('../../../wp-load.php');
我认为您必须在自定义文件中使用 wordpress 功能之前添加此行。并确保我根据我的 wordpress 安装结构添加了 ../ 3 次。这取决于您手动检查的结构。 前任。如果您的自定义文件在您的主题/yourtheme/custom.php 中,那么上面的代码将完美运行,如果没有,则根据您的路径添加 ../ 或删除一个或多个 ../。
【讨论】:
【参考方案4】:以下是我正在使用的代码:
<?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);
?>
【讨论】:
【参考方案5】:这应该可行:
require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
即当 php 脚本在同一台服务器上并且 WP 安装在 root 上时。和大多数情况一样。
【讨论】:
不在 cron 作业中(按照 OP 的要求),他们不在。 如果 wordpress 不在服务器的根目录内,但在 www.mysite.com/some/path/wordpress 等文件夹中,它将失败【参考方案6】:对于 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;
?>
【讨论】:
谢谢! switch_to_blog() 正是我在这里寻找的!【参考方案7】:在你的 php 脚本文件中包含 wp-load.php 文件(在你的 wordpress 安装的根目录中),就像这样,
require_once("/path/to/wordpress/wp-load.php");
您必须提供 wp-load 文件的绝对路径, 现在你可以在你的 php 脚本中使用 wordpress 的所有功能了
【讨论】:
是的,它也会加载 wordpress……但会让所有功能都可以使用 我尝试了上述解决方案。在一个文件中有效,但在后续文件中无效。 当然它不会......如果你没有在你的主脚本中包含那个文件(你包含 wp-load.php)它不会工作......那么你将不得不包含它在所有文件中。以上是关于如何在自定义 PHP 脚本中调用 WordPress 函数的主要内容,如果未能解决你的问题,请参考以下文章
织梦CMS如何在自定义表单页调用arclist标签啊,怎么在自定义表单页调用无效!