手动wp_install()遇到困难

时间:2012-02-03 21:57:18

标签: php wordpress

我正在尝试使用以下代码在PHP中自动安装WordPress发行版:

$base_dir = '/home/username/wordpress_location';
chdir($base_dir);

define('WP_SITEURL', 'http://www.domain.com/');
define('WP_INSTALLING', true);

require_once 'wp-load.php';
require_once 'wp-admin/includes/upgrade.php';
require_once 'wp-includes/wp-db.php';
$result = wp_install($title, $username, $email, true, null, $password);

当我手动运行 wp_install() [ /wp-admin/includes/upgrade.php ]时,出现此错误:

Fatal error: Call to a member function flush_rules() on a non object in /home/username/public_html/wp-admin/includes/upgrade.php on line 85

查看WordPress source code后,当 $ wp_rewrite 本身时, $ wp_rewrite 似乎正在尝试调用 flush_rules()不存在。

另一个奇怪的转折是,它实际上与wordpress-cli-installer的代码相同。我的wp-config.php文件是自动生成并准备好的。

为什么wordpress-cli-installer的代码有效,但我的代码没有?

编辑:

经过大量的反复试验后,我发现我的代码无效,因为它是在函数中定义和执行的。将代码与函数分离并执行后,它就可以了。然而,这提出了另一个问题。甚至可以在函数内执行上面的 代码吗?我尝试在 require_once 语句后使用$GLOBALS += get_defined_vars(); hack,但这似乎没有做任何事情。换句话说:

<?php

$base_dir = '/home/username/wordpress_location';
chdir($base_dir);

define('WP_SITEURL', 'http://www.domain.com/');
define('WP_INSTALLING', true);

require_once 'wp-load.php';
require_once 'wp-admin/includes/upgrade.php';
require_once 'wp-includes/wp-db.php';
$result = wp_install($title, $username, $email, true, null, $password);

// ^ This works.
// v This won't work.

function run(){
    $base_dir = '/home/username/wordpress_location';
    chdir($base_dir);

    define('WP_SITEURL', 'http://www.domain.com/');
    define('WP_INSTALLING', true);

    require_once 'wp-load.php';
    require_once 'wp-admin/includes/upgrade.php';
    require_once 'wp-includes/wp-db.php';
    $result = wp_install($title, $username, $email, true, null, $password);
}
run();

?>

1 个答案:

答案 0 :(得分:2)

How do I use the require_once inside of a function while still being able to access and manage the globals? 这个想法总体上是错误的。您可以创建全局唯一必需的变量(可能会从版本更改为版本)。但“肮脏”的方式是

function make_global()
{
    $test_var = "I'm local";
    $GLOBALS += get_defined_vars();
}
var_dump(isset($test_var));
make_global();
var_dump(isset($test_var));