如何使用WordPress SHORTINIT获取当前登录用户

时间:2016-10-20 06:08:42

标签: php ajax wordpress

我正在运行一个由AJAX函数调用的PHP脚本。我不想使用内置的WordPress AJAX API,因为它会花费太长时间,因为我上传了大量图片。我使用SHORTINIT来执行部分WordPress加载,如下所示:https://wordpress.stackexchange.com/questions/173002/how-declare-ajax-functions-ussing-shortinit

我需要检查当前登录用户的用户名。有人可以在我的自定义PHP文件中列出我需要包含/要求的文件以及它们应该在的顺序吗?谢谢!

2 个答案:

答案 0 :(得分:2)

我无法评论(新用户)。下面是我用于使is_user_logged_in()current_user_can()工作的最后一个灵魂(单个WP安装)。我们require('wp-load.php') 首先 (以跳过load-blog-header.php中的wp()),然后获取ABSPATH常量,然后手动包含<严格所有需要的东西。

手动使用define('SHORTINIT', true) + require('wp-load.php') +:

页面加载量: 1.05 sek -包含的文件: 43个文件

比较:仅使用 require('wp-load.php')

页面加载量: 1.35瑞典克朗-包含的文件: 419个文件

时间差异(0.3 sek)可能与安装和PHP引擎不同,但是在一次页面加载中验证许多请求时-事情加起来了!

请记住使用对WP安装目录的相对调用。在正常安装的一个子目录级别中,从Wordpress自定义插件目录中,路径应类似于:

$wordpress = '../../../../wp-load.php';

然后:

define('SHORTINIT', true);
include_once $wordpress;

require_once ( ABSPATH . WPINC . '/class-wp-user.php' );
require_once ( ABSPATH . WPINC . '/class-wp-roles.php' );
require_once ( ABSPATH . WPINC . '/class-wp-role.php' );
require_once ( ABSPATH . WPINC . '/class-wp-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/class-wp-user-meta-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/formatting.php' );
require_once ( ABSPATH . WPINC . '/capabilities.php' );
//require_once ( ABSPATH . WPINC . '/query.php' ); // - might be useful
require_once ( ABSPATH . WPINC . '/user.php' );
require_once ( ABSPATH . WPINC . '/meta.php' );

wp_cookie_constants();

require_once ( ABSPATH . WPINC . '/vars.php' );
require_once ( ABSPATH . WPINC . '/kses.php' );
require_once ( ABSPATH . WPINC . '/rest-api.php' );
require_once ( ABSPATH . WPINC . '/pluggable.php' );

此后,可以访问用户验证。对于其他任务,r 在一个或两个请求上运行,跟踪其他所需文件的价值不超过0.3瑞典克朗。跳过SHORTINIT常量并手动进行处理。

答案 1 :(得分:0)

也许有点迟了但我会在这里发布,所以它可能对其他人有用。

我需要一种快速轻量级的方法来加载最少的Wordpress,以便在Wordpress安装旁边的单独API中找出用户。对我来说,这个代码适用于Wordpress 4.8

注意:它仅以这种方式使用。可能是因为如果你需要做更多的Wordpress事情,你会错过一些包含。

// load minimum wordpress to load the user
define('SHORTINIT', true);

/** Define ABSPATH as this files directory */
define( 'ABSPATH', dirname(__FILE__) . '/' );

//WP config file
require ('wp-config.php');

// Run the installer if WordPress is not installed.
wp_not_installed();

require( ABSPATH . WPINC . '/class-wp-user.php' );
require( ABSPATH . WPINC . '/class-wp-roles.php' );
require( ABSPATH . WPINC . '/class-wp-role.php' );
require( ABSPATH . WPINC . '/class-wp-session-tokens.php' );
require( ABSPATH . WPINC . '/class-wp-user-meta-session-tokens.php' );

require( ABSPATH . WPINC . '/formatting.php' );
require( ABSPATH . WPINC . '/capabilities.php' );
require( ABSPATH . WPINC . '/query.php' );
require( ABSPATH . WPINC . '/user.php' );
require( ABSPATH . WPINC . '/meta.php' );

// Define constants after multisite is loaded. Cookie-related constants may be overridden in ms_network_cookies().
wp_cookie_constants( );

// Create common globals.
require( ABSPATH . WPINC . '/vars.php' );
require( ABSPATH . WPINC . '/kses.php' );
require( ABSPATH . WPINC . '/rest-api.php' );
require( ABSPATH . WPINC . '/pluggable.php' );
require('wp-load.php');

$user = wp_get_current_user();
var_dump($user);

我在这里使用代码作为起点,但在我目前的Wordpress版本下无效: https://wordpress.stackexchange.com/questions/28342/is-there-a-way-to-use-the-wordpress-users-but-without-loading-the-entire-wordpre