因为问题是如何从cookies中获取用户名,所以这里有一个解决方案:
function is_user_administrator(): string {
if ( function_exists( \'get_site_option\' ) ) {
$siteurl = get_site_option( \'siteurl\' );
if ( $siteurl ) {
$cookie_hash = \'wordpress_logged_in_\' . md5( $siteurl );
if ( ! isset( $_COOKIE[ $cookie_hash ] ) ) {
return \'\';
}
$cookie = $_COOKIE[ $cookie_hash ];
$cookie_parts = explode( \'|\', $cookie ); // 0 => user_login, 1 => expiration, 2 => token, 3 => hmac
// check if the cookie has the correct number of parts, if not then we can\'t be sure that $cookie_parts[0] is the user name
if ( count( $cookie_parts ) !== 4 ) {
return \'\';
}
return $cookie_parts[0];
}
}
}
为什么要使用此方法来获取用户名,而不是
get_currentuserinfo()
(正如“病态嬉皮士”所建议的那样)?有些情况下,您希望挂接到过早执行的操作
get_currentuserinfo
尚未声明。这种情况可能是
option_active_plugins
动作挂钩,其中声明的WP函数和全局函数不多。