Как правильно использовать функции WordPress вне файлов WordPress?

28 мар. 2012 г., 00:16:25
Просмотры: 110K
Голосов: 71

Я прочитал о 2 методах инициализации функций WordPress вне файлов WordPress, чтобы мы могли использовать эти функции на любой странице или веб-сайте за пределами блога WordPress.

Какой из этих 2 методов является правильным? Каковы случаи использования каждого метода, если оба верны? В чем разница между использованием одного метода или другого?

Метод 1:

<?php 
    define('WP_USE_THEMES', false);
    require('./wp-blog-header.php');
?>

Метод 2:

<?php 
    define('WP_USE_THEMES', false);
    require('./wp-load.php');
?>
6
Комментарии

Какие функции WP вы пытаетесь использовать "вне WP" и почему? Оба этих метода всё равно загрузят окружение WP (хотя и без поддержки темы), так что вы по-прежнему вызываете функции внутри WP.

EAMann EAMann
28 мар. 2012 г. 00:41:56

Я пытаюсь понять разницу между двумя методами. Что я хочу сделать - это интегрировать тему wordpress с моим скриптом поддержки. Мне понадобятся хедер, футер и цикл из wordpress, а также поддержка виджетов и других плагинов.

alhoseany alhoseany
28 мар. 2012 г. 01:33:10

Я очень сомневаюсь, что это правильный путь... Существуют более подходящие решения, чем попытки загрузить сам WordPress.

EAMann EAMann
28 мар. 2012 г. 01:57:44

Я открыт для любых предложений, ищу лучший способ сделать это. Как лучше всего интегрировать тему WordPress с внешним веб-приложением?

alhoseany alhoseany
28 мар. 2012 г. 13:29:09

Метод 2 сработал для меня при разработке плагина. Спасибо.

StealthTrails StealthTrails
1 июл. 2021 г. 22:57:32

Я предлагаю изменить на require( $_SERVER['DOCUMENT_ROOT'] . '/wp-blog-header.php' );, что загружает ядро WordPress из корня документа и избегает ./././ (и т.д.).

EdA EdA
14 авг. 2024 г. 21:57:33
Показать остальные 1 комментариев
Все ответы на вопрос 7
1
67

Между файлами есть небольшая разница. Когда вы просматриваете страницу WordPress, первым вызывается файл index.php. По сути, это ваш "Метод 1:":

define('WP_USE_THEMES', true);

/** Загружает окружение WordPress и шаблон */
require ('./wp-blog-header.php');

Файл заголовка блога (который подгружает остальную часть WordPress) напрямую загружает wp-load.php и запускает сам WordPress. Вот основная часть wp-blog-header.php:

if ( !isset($wp_did_header) ) {

    $wp_did_header = true;

    require_once( dirname(__FILE__) . '/wp-load.php' );

    wp();

    require_once( ABSPATH . WPINC . '/template-loader.php' );

}

Таким образом, разница между вашими двумя методами заключается в том, что загружается.

Метод 1 делает именно то, что делает WordPress для загрузки себя (за исключением отключения тем). Поэтому, если вам нужен весь WordPress и вы хотите запустить все стандартные хуки/действия, используйте этот путь.

Метод 2 — это просто следующий шаг в цепочке. Он загружает весь WordPress, но не вызывает wp() и не загружает шаблонизатор (используемый темами). Метод 2 будет немного легче, но должен предоставить ту же функциональность.

28 мар. 2012 г. 01:57:02
Комментарии

Есть ли диаграмма или что-то подобное, что отображает все эти файлы? Я видел её давно, но не могу найти.

ninja08 ninja08
12 июн. 2015 г. 19:53:13
3
21

Метод 2 из вашего вопроса:

<?php 
define( 'WP_USE_THEMES', false ); // Не загружать функциональность поддержки темы
require( './wp-load.php' );

wp-load.php предоставляет доступ ко всем функциям WordPress, это всё. Первая строка указывает WordPress не загружать файлы темы; возможно, файлы необходимы для ваших требований, тогда удалите эту строку.

28 мар. 2012 г. 00:32:52
Комментарии

что вообще означает первая строка?

Sagive Sagive
28 мар. 2012 г. 01:35:46

Первая строка указывает WordPress не загружать весь функционал поддержки темы. По сути, загружается меньше файлов.

EAMann EAMann
28 мар. 2012 г. 01:52:27

Нужна ли первая строка только для первого метода?

mcont mcont
5 окт. 2014 г. 16:46:33
0

Иногда загрузка файла functions.php темы может вызвать проблемы. У меня он нарушал HTML-код другой страницы. Вот что я сделал, чтобы решить эту проблему:

define('STYLESHEETPATH', '');
define('TEMPLATEPATH', '');
require_once(RAIZ_WORDPRESS."/wp-load.php");
27 окт. 2015 г. 13:19:27
0

wp-blog-header.php добавит заголовок статуса, он вернет HTTP-статус код 404

wp-load.php этого не делает

Полезно учитывать при использовании AJAX, так как он проверяет HTTP-статус код

11 апр. 2016 г. 13:42:04
0

Вам не нужно подключать всю тему, чтобы использовать функции, достаточно указать путь к файлу wp-load.php в директории WordPress.

<?php
require($_SERVER['DOCUMENT_ROOT'] . '/wordpress/wp-load.php');

?>
7 мая 2020 г. 11:45:48
2

@ninja08

Мы можем использовать расширение xDebug для анализа скрипта.

Просто включите ;xdebug.profiler_enable = 1 в вашем файле php.ini, удалив ; в начале строки, после этого перезапустите сервер Apache и запустите ваш сайт на WordPress... теперь в временной директории вашего сервера XAMPP будет создан файл... откройте этот файл в приложении WincachGrind.

Теперь вы можете увидеть карту вашего скрипта

Простой анализ WordPress в WincacheGrind

14 дек. 2015 г. 07:08:49
Комментарии

Вам следовало добавить это в комментарий ниже к ninja08. Теперь это некорректный ответ.

alhoseany alhoseany
15 дек. 2015 г. 09:26:43

@alhoseany да... я знаю... но у меня недостаточно репутации... поэтому я решил сделать так.

Mostafa Mostafa
15 дек. 2015 г. 20:48:44
0

В моем случае './' не сработало, но это работает идеально:

require('../../../wp-load.php');

(Вам нужно будет вернуться на столько папок назад, сколько необходимо, в зависимости от того, где находится ваша исполняемая папка)

4 апр. 2022 г. 17:58:23