Wordpress улучшит REST API - SHORTINIT не работает - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь улучшить производительность пользовательских конечных точек Wordpress API.
Я создал простой файл плагина в папке plugin / PLUGIN_NAME, где я вызываю функцию «register_rest_route» для установки конечных точек.
Для улучшенияПроизводительность Я пытаюсь загрузить не все плагины, а только то, что мне нужно, Wordpress CORE для запросов пользователей и постов и Ultimate Members.Вот мой код:

define('SHORTINIT', true);
require_once dirname(__FILE__) . '/../../../wp-load.php';
require_once dirname(__FILE__) . '/../ultimate-member/ultimate-member.php';

add_action('rest_api_init', function () {

  register_rest_route( 'my-api/v1', 'test/me',array(
              'methods'  => 'POST',
              'callback' => 'test'
     }
  ));
...
...

Это работает, но проблема в том, что работает, даже если я не загружаю скрипт "wp-load.php".В моем тестовом методе я использую WP_User_Query, WP_Query и метод конечного члена, такой как um_user ().
Кажется, что SHORTINIT не работает.
Что я не так?

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Чтение исходного кода wp-settings.php показывает проблему:

// lines 144 to 147 of wp-settings.php

// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT ) {
    return false;
}

// lines 359 to 373 of wp-settings.php

// Load active plugins.
foreach ( wp_get_active_and_valid_plugins() as $plugin ) {
    wp_register_plugin_realpath( $plugin );
    include_once( $plugin );

    /**
     * Fires once a single activated plugin has loaded.
     *
     * @since 5.1.0
     *
     * @param string $plugin Full path to the plugin's main file.
     */
    do_action( 'plugin_loaded', $plugin );
}
unset( $plugin );

Проверка SHORTINIT выполняется перед загрузкой плагинов.Так что ваш "определить ('SHORTINIT', правда);"выполняется после того, как проверяется SHORTINIT, и не имеет никакого эффекта.

Далее wp-settings.php включается косвенно из wp-load.php, поэтому при выполнении кода вашего плагина wp-load.php уже был включен.

0 голосов
/ 22 сентября 2019

У кого такая же проблема, я рекомендую использовать Plugin Load Filter , плагин WordPress, который позволяет вам выбрать, какие плагины активировать в REST API.

...