GET_USERS需要未序列化的元值

时间:2012-01-29 作者:john

我正在尝试将所有用户分配到自定义usermeta。我知道get_users() 是应该工作的;然而,它似乎不起作用。我拥有的是一个存储类别ID的usermeta,我正在尝试使用\'meta_value\' => $cat_id 查询数据库。这就是我的代码:

$args = array(
    \'meta_key\' => \'custom-usermeta\',
    \'meta_value\' => $cat_id
);
$users = get_users( $args );
以下是我如何保存它:

update_user_meta( $user_id,\'custom-usermeta\',$cat_id);
$cat_id 是一个数组。

但这不起作用。到目前为止,我发现meta_value 需要未序列化的值。我怎样才能让它发挥作用?我试过了\'meta_compare\' => \'LIKE\' 但这几乎抓住了一切(因为Wordpress序列化值的方式)。我还能做些什么来解决这个问题吗?

2 个回复
SO网友:Chip Bennett

在原始代码中,您没有将运算符传递给meta_compare. 请注意get_users() 不定义默认运算符。尝试使用\'=\':

$args = array(
    \'meta_key\' => \'custom-usermeta\',
    \'meta_value\' => $cat_id,
    \'meta_compare\' => \'=\'
);
$users = get_users( $args );
作为诊断,您可以确保问题不是自定义用户元数据的保存/查询。将meta\\u键和meta\\u值替换为默认的WP用户meta键之一,以查看是否返回了任何内容。(最简单的可能是用户角色?)

这是一个很长的机会,但是:get_users() Codex文档中另有说明,根据我从源代码中收集的信息meta_query 对于WP_user_query 应与meta_query 对于WP_query - 在这种情况下,您是否尝试将元查询放入数组中?e、 g.:

$args = array(
    array( 
        \'meta_key\' => \'custom-usermeta\',
        \'meta_value\' => $cat_id
    )
);
$users = get_users( $args );
参见。WP_Query usage of meta_query.

SO网友:kaiser

您可以尝试使用“直接”WP_User_Query.

$user_search = new WP_User_Query( array( 
    \'orderby\' => \'display_name\',
    \'fields\' => \'all_with_meta\',
    \'meta_key\' => \'CAT OR WHATEVER KEY NAME\',
    \'meta_value\' => $cat_id,
    \'meta_compare\' => \'=\'
) );
$users = $user_search->get_results();
未经测试,但应能正常工作。

Update

据我所知$meta_value 在…内update_metadata() (包装的函数update_user_meta()), 接受单个值。将其序列化的唯一方法是maybe_serialize();, 仅按需序列化。所以问题一定在你这边$cat_ID 元值。

您可以在maybe_serialize() 使用以下过滤器:

apply_filters( "update_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $prev_value )
{$meta_type} 会是user 在这种情况下。放下你的$cat_ID 在一些测试函数中查看发生了什么。

结束

相关推荐

Posting as different users

我会尽量简短一点。我是一家报纸的站长,在一天内我上传了一期报纸,其中有多个作者撰写了几篇文章。问题是:我如何制作一篇文章并显示一个custon作者的名字,而不必登录到其他用户,只需让它正确显示即可。我真的希望能够做到这一切从一个管理帐户。谢谢各位,我真的很感谢你们的帮助!