当前位置: 首页 > 知识库问答 >
问题:

Wordpress improve REST API - SHORTINIT NOT WORK

岳正阳
2023-03-14

我正在尝试提高Wordpress API自定义endpoint的性能。
我在插件/PLUGIN_NAME文件夹下创建了一个插件简单文件,我称之为“register_rest_route”函数来设置endpoint。
为了提高性能,我试图加载不是所有的插件,而是只加载我需要的,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个答案

谢铭
2023-03-14

对于有同样问题的用户,我建议使用插件加载过滤器,这是一个wordpress插件,可以让您选择在RESTAPI中激活哪些插件。

汤飞羽
2023-03-14

阅读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', true);”是在检查SHORTINIT之前执行的,并且没有效果。

进一步的wp设置。php间接包含在wp加载中。因此,当您的插件代码执行wp加载时。php已经包含在内。

 类似资料:

相关问答

相关文章

相关阅读