Включить ядро Wordpress в собственные скрипты
Я пытаюсь "импортировать" ядро Wordpress в собственный скрипт, чтобы использовать такие функции, как wp_query и т. д. Я создал скрипт в подкаталоге (собственной структуре) и хочу расширить его wordpress, но каждый раз скрипт выдает ошибку:
критическая ошибка: вызов функции-члена add_rewrite_tag () для не-объекта в .../ wordpress / wp-includes / таксономия.в PHP on line 333
например (когда я удалить add_action ('init',' create_initial_taxonomies', 0 )):
критическая ошибка: вызов функции-члена add_rewrite_tag () для не-объекта в .../ wordpress / wp-включает / сообщение.в PHP on line 1006
Не-объект является $wp_rewrite-object. Я что-то откликнулся и понял, что первый $wp_rewrite действителен, а при следующем вызове нет. Я ничего не изменил в файлах WP core.
Я пытаюсь включить ядро по телефону:
require_once(BASE_PATH . 'wp-load.php');
есть ли у кого-нибудь идеи для меня?
спасибо
3 ответов
короткий ответ, сделайте следующее:
define('WP_USE_THEMES', false);
global $wp, $wp_query, $wp_the_query, $wp_rewrite, $wp_did_header;
require(BASE_PATH . 'wp-load.php');
длинный ответ, это тонкий gotcha вокруг импорта скриптов с PHP.
Если вы определяете локальную переменную вне всех функций, то ее можно получить внутри функции с помощью "global". Если внутри функции есть локальная переменная,ее нельзя получить позже с помощью global, если только она не определена как глобальная.
скрипт 'wp-настройки.php-это то, в чем проблема. Он включен через ваш звонок, чтобы включить " wp-load.на PHP'.
переменные, определенные там не указано как глобальное; вместо этого это предполагается, потому что скрипт всегда запускается вне любых функций и поэтому автоматически глобален. т. е.
$wordpress = 'foo';
function wordpressFunction() {
global $wordpress;
}
поскольку вы импортируете скрипт внутри функции, они теперь становятся локальными переменными. Вы, по существу, делаете:
function myFramework() {
$wordpress = 'foo';
function wordpressFunction() {
global $wordpress;
}
}
таким образом, исправление состоит в том, чтобы определить их как глобальные перед импортом скрипт. Сейчас $wp_query, и другие, определенные как глобальные, правильно нашли.
самый простой способ получить доступ ко всему, что wordpress запрограммировал, - использовать следующее:
require_once('/../../../wp-blog-header.php'); // Use actual root path to wp-blog-header.php
header("HTTP/1.0 200 OK");
используя приведенный выше код, вы получите все функции, которые вы обычно получаете с использованием шаблона в WordPress. Я пробовал все другие методы, перечисленные выше, и этот, безусловно, лучший.
У меня была такая же ошибка. Я хочу сделать несколько статей с постоянными ссылками. Это помогло:
global $wpdb, $wp_rewrite;
require '/(...)/wp-config.php';
$result = $wpdb->get_results( $wpdb->prepare( ... ) );
foreach( $result as &$item )
$item->link = get_permalink( $item->ID );
Я также нашел это полезным в другом случае: http://www.stormyfrog.com/using-wpdb-outside-wordpress/