搜索META_VALUE为空的自定义帖子

时间:2017-06-07 作者:sineverba

我需要得到只有自定义的职位有meta_key landing_exportedmeta_value NULL.

我知道在我的数据库中至少有2篇自定义帖子,但我的代码显示“找不到”。

$args = array(
            \'post_type\'     => LANDING__CUSTOM_POST,
            \'meta_query\' => array(
                array(
                    \'key\' => \'landing_exported\',
                    \'value\' => false,
                    \'type\' => \'BOOLEAN\'
                )
            )
        );

        // query
        $the_query = new WP_Query( $args );
        if( $the_query->have_posts() ) {

           // do funny things

        } else {

           echo \'nothing found\';

        }

3 个回复
最合适的回答,由SO网友:Picard 整理而成

我取决于您是否正在查找空值:

$args = array(
    \'post_type\'  => LANDING__CUSTOM_POST,
    \'meta_query\' => array(
        array(
            \'key\'     => \'landing_exported\',
            \'value\'   => \'\',
            \'compare\' => \'=\'
        )
    )
);

// query
$the_query = new WP_Query( $args );
搜索值,如:meta_value = \'\'

或者如果你正在寻找NULL 更难的值(或者我找不到更简单的解决方案):

add_filter( \'posts_where\', \'my_modify_the_posts_where\' );
function lets_modify_the_posts_where( $clause = \'\' ) {
    global $wpdb;

    $clause .= " AND " . $wpdb->prefix . "postmeta.meta_value IS NULL"
    return $clause;
}

$args = array(
    \'post_type\'  => LANDING__CUSTOM_POST,
    \'meta_query\' => array(
        array(
            \'key\'     => \'landing_exported\',
            \'compare\' => \'EXISTS\'
        )
    )
);

// query
$the_query = new WP_Query( $args );

remove_filter(\'posts_where\', \'my_modify_the_posts_where\');
搜索值,如:meta_value IS NULL

SO网友:Rarst

我不知道你从哪里弄来的BOOLEAN 键入发件人。我认为它不是WP_Query.

由于元数据总是存储为文本,因此很难猜测NULL 价值

您应该检查由代码生成的数据库中的实际值,并进行相应的查询。可能是这样的\'NULL\' 字符串,或者它可能是空字符串,或者它可能完全未设置。

SO网友:Annesley Newholm
add_filter( \'posts_where\',      \'cb2_posts_where_allow_NULL_meta_query\' );
function cb2_posts_where_allow_NULL_meta_query( $where ) {
    return preg_replace(
        "/CAST\\(([a-z0-9_]+)\\.([a-z0-9_]+) AS SIGNED\\)\\s*IN\\s*\\(([^)]*)\'NULL\'/mi",
        \'CAST(\\1.\\2 AS SIGNED) IN(\\3NULL\',
        $where
    );
}
结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post