У меня есть 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>
У кого-нибудь есть какие-нибудь мысли / предложения?
источник
get_pages
ему нужен класс WP. поэтому wp-blog-header.php был правильным файлом для вызова.HTTP_HOST
,SERVER_NAME
иREQUEST_URI
. Также пробовал с обоимиwp-blog-header.php
иwp-load.php
. То же сообщение об ошибке, как указано в исходном вопросе во всех случаях. Я запускаю это из моего каталога тем - это имеет значение?Вы можете использовать команду wp-cli
eval-file
:Это сначала загрузит среду WP, а затем запустит ваш файл.
источник
Принятый ответ @prettyboymp о наиболее полезной и уникальной информации о доступе к WordPress из php-скрипта, которую я нашел в Интернете. У меня отлично работало с WP core 3.7.1, потом 3.9 сломал.
Проблема заключалась в том, что он
wp-load.php
изменил способ проверкиREQUEST_URI
правильности пути. Но, к счастью, он также добавил новый фильтр, позволяющий замкнуть накоротко тест.Таким образом , чтобы восстановить функциональные возможности ответа на 3.9, я добавил
define('SUNRISE', 'on');
кwp-config.php
, и создал файлwp-content/sunrise.php
с этим содержимым:источник
Вариант ответа @ prettyboymp может быть следующим:
источник