問題描述

我有一個 PHP 腳本,我需要作為一個 cron 作業運行。但是該腳本需要訪問 WP API(get_pages()get_post_meta()get_permalink()) 。我按照 http://codex.wordpress.org/Integrating_WordPress_with_Your_Website 的説明進行操作,但無效。

碼:

require_once('../../../wp-blog-header.php');
$args = array(
    'child_of' => 2083
);
$pages = get_pages($args);

但是當我從命令行運行 php -q this_file.php 時,我得到以下輸出:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Database Error</title>

</head>
<body>
    <h1>Error establishing a database connection</h1>
</body>
</html>

任何人有任何想法/建議?

最佳解決方案

WordPress 希望 $ _SERVER 變量被設置為一般的 Web 請求。此外,我建議加載 wp-load.php 而不是 wp-blog-header.php,因為你可能不需要 WP 類或模板加載器來運行。以下是我通常從命令行開始任何需要與 WP 進行交互的腳本:

define('DOING_AJAX', true);
define('WP_USE_THEMES', false);
$_SERVER = array(
    "HTTP_HOST" => "mysite.com",
    "SERVER_NAME" => "mysite.com",
    "REQUEST_URI" => "/",
    "REQUEST_METHOD" => "GET"
);
require_once('current/wp-load.php');

次佳解決方案

您可以使用 wp-cli eval-file 命令:

@daily /usr/bin/wp --path=/path/to/wp/ eval-file /path/to/that_file.php

這將首先加載 WP 環境,然後運行您的文件。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。