按元值查询用户,得到奇怪的答案

时间:2015-12-06 作者:Luis Rock

以下是我的案例:

我正在尝试获取所有与特定元键相关的值的用户。换句话说,我不想选择在该元键(mps\\u finalDate)上没有任何内容的用户。

下面是我的代码:

$users = get_users(array(
 \'meta_key\'     => \'mps_finalDate\',
 \'meta_value\'   => \'\',
 \'meta_compare\' => \'!=\',
 ));
其工作原理与

$users = get_users(array(
  \'meta_key\'     => \'mps_finalDate\',
  ));
但问题是:这段代码选择的用户曾经在这个元字段上有一些价值,即使现在他们什么都没有了。看来update_user_meta( $user_id, \'mps_finalDate\', trim( $_POST[\'mps_finalDate\'] ) ); 我在代码中使用的不是删除db上的前一个值,因此导致此问题。

总之:上面的代码并不是在选择一个从未在元键字段上有值的用户mps_finalDate(这是需要的),但它正在选择一个曾经有值的用户,即使现在该值为"".

有什么帮助吗?

1 个回复
最合适的回答,由SO网友:Brandt Solovij 整理而成

看起来您正在使用自定义元字段,但正在搜索默认的元属性。

https://codex.wordpress.org/Class_Reference/WP_User_Query

WP\\u User\\u Query可能是一个更健壮的解决方案。

所以它看起来像:

$args = array(
    \'meta_query\' => array(
        \'relation\' => \'AND\',
        array(
            array(
                \'key\'     => \'mps_finaldate\',
                \'value\'   => \'\',
                \'compare\' => \'!=\'
            ),
            array(
                \'key\'     => \'mps_finaldate\',
                \'value\'   => null,

                \'compare\' => \'!=\'
            )
        )
    )
 );
$user_query = new WP_User_Query( $args );
编辑:

WP_User_Queryget_users 您使用的函数,但作为包装器,它还将完成get_userdata 功能

这是一个巨大且有害的过程,原因有二(各)

很好:它可以被钩住(有人编辑我)很好:代码寿命是持续的,因为它是核心api使用

有害的:任何人和每个人的插件也可以钩住有害的:任何人和每个人的插件也可以钩住

我会选择使用wp_user_query 类,如果只是因为参数的结构和文档都很好(但我会留下来,因为这种方法是wp\\U核心api的长寿优势)

因人而异

相关推荐

如何读取WordPress$Query关联数组(散列)键的值

WordPress编程新手(来自更为传统的环境),并试图了解其一些“独特”特性。我们的网站上有一个目录页,此代码驻留在functions.php, 如果条件为true,则调整结果。if( $query->is_post_type_archive( \'directory\' ) ){ ...//do stuff } 我想知道如何获取is_post_type_archive 这就是“目录”当我对值使用测试时。。。var_dumb($query->is_post