我相信这对你们来说很容易,但对我来说都是新的。
基本上,我想检查一下,如果登录的用户在他们的个人资料中附加了特定的元数据,那么某些东西会显示在网站上。
用户的元数据存储在wp_usermeta表中,该表包含umeta_id、user_id、meta_key和meta_value。本质上,我需要看看user_id是否有一个名为"test"的meta_key。
我知道get_user_meta()函数,但我无法让它按我想要的方式工作。。。
global $current_user;
get_currentuserinfo(); // wordpress global variable to fetch logged in user info
$userID = $current_user->ID; // logged in user's ID
$havemeta = get_user_meta($userID, 'test', true); // stores the value of logged in user's meta data for 'test'.
if (isset($havemeta)){
echo $havemeta;
} else {
echo "No";
}
该代码的理论是,我检查meta_key"test"是否包含meta_value,如果为true,X则执行Y。令人烦恼的是,并非所有用户都有"test"的meta_key。因此,如果登录的用户没有这个元密钥,代码就无法运行。此外,我不想检查元密钥的实际值(我所关心的都可以是NULL),我只想知道登录用户是否存在这样的密钥。
有什么想法吗?
Wordpress>3.3
所提出的解决方案有一个警告:值为false
的meta_key将给出假阴性。
要询问WordPress是否设置了元密钥,即使值是false
,也可以使用metadata_exists
:
if ( metadata_exists( 'user', $user_id, $meta_key ) ) {
...
}
if ($havemeta) { echo 'your stuff'; }
(TESTED)根据文档,如果将true
作为最后一个参数,它将返回元数据字段的值。这意味着您必须将false
作为最后一个参数。
$havemeta = get_user_meta($userID, 'test', false);
然后,正如在另一个答案中所说,你可以检查
if ($havemeta)
echo $havemeta;
} else {
echo "No";
}