我正在尝试提高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不起作用。
我错了什么?
对于有同样问题的用户,我建议使用插件加载过滤器,这是一个wordpress插件,可以让您选择在RESTAPI中激活哪些插件。
阅读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已经包含在内。