Який правильний спосіб використання функцій WordPress поза файлами WordPress?


59

Я читав про два способи ініціалізації функції 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');
?>

Які функції WP ви намагаєтеся використовувати "поза WP" і чому? Будь-який із цих методів все ще завантажить середовище WP (хоча і без підтримки теми), тож ви все ще викликаєте функції всередині WP.
EAMann

Я намагаюся зрозуміти різницю між двома методами. Що я буду робити, це інтегрувати тему Wordpress із моїм сценарієм підтримки. тому знадобляться заголовок, колонтитул та цикл від wordpress плюс деяка підтримка віджетів та інших плагінів
alhoseany

Я дуже сумніваюся, що це так, як ви хочете робити щось ... Є кращі рішення, ніж намагатися завантажувати сам WordPress.
EAMann

Я широко відкритий для пропозицій, шукаю найкращий спосіб зробити справи? який найкращий спосіб інтегрувати тему Wordpress із зовнішнім веб-додатком?
alhoseany

Відповіді:


58

Різниця між файлами невелика. Переглядаючи сторінку WordPress, перший названий файл є index.php. І це, по суті, ваш "Метод 1:"

define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
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 буде трохи легшим, але повинен надати вам однаковий функціонал.


3
Чи є діаграма чи щось, що відображає всі ці файли? Я давно бачив, але не можу його знайти.
ninja08

17

Спосіб 2 із вашого запитання:

<?php 
define( 'WP_USE_THEMES', false ); // Don't load theme support functionality
require( './wp-load.php' );

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


1
що означає цей перший рядок?
Пробачте SEO

8
Перший рядок повідомляє WordPress не завантажувати всі його функції підтримки теми. В основному завантажуйте менше файлів.
EAMann

Чи потрібен перший рядок лише для першого методу?
mcont

4

wp-blog-header.php додасть статус заголовка, він поверне код коду статусу 404

wp-load.php не буде

Корисно відзначити під час використання ajax під час перевірки коду статусу http


2

Іноді завантаження function.php теми може спричинити певні проблеми. Це зламало html моєї іншої сторінки. Отже, це я зробив і вирішив свою проблему:

define('STYLESHEETPATH', '');
define('TEMPLATEPATH', '');
require_once(RAIZ_WORDPRESS."/wp-load.php");

0

@ ninja08

Ми можемо використовувати xDebug php розширення для аналізу сценарію.

просто увімкніть ;xdebug.profiler_enable = 1у своєму php.iniфайлі, видаливши ;з першого рядка та після цього перезапустіть сервер apache та запустіть сайт WordPress ... тепер файл, створений у каталозі tmp вашого xampp-сервера .., відкрийте цей файл за допомогою програми WincachGrind .

тепер ви можете побачити карту вашого сценарію

WincacheGrind Простий аналіз Wordpress


Ви повинні були додати це в коментарі нижче ninja08. тепер це неправильна відповідь.
alhoseany

2
@alhoseany так ... я зараз це ... але я не маю достатньо репутації ... і тоді я вирішую це зробити.
Мостафа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.