检查特定的元键,如果其元值为空,则为…(WP发布元查询)

时间:2020-07-09 作者:Ben Michael Oracion

我正在尝试对wp Post Meta表进行wp查询,在那里我想检查Post的Meta键及其Meta值是否为空。

元键是wc_pay_per_post_product_ids

IF 如果语句为TRUE,则显示以下内容:

<h1>The Meta Key Is Empty or NULL</h1>
<div class="row"><div class="col-2">One</div><div class="col-10">Two</div></div>
ELSE:

<h1>The Meta Key Is NOT Empty or NULL</h1>
<div class="row"><div class="col-4"></div><div class="col-4"></div><div class="col-4"></div></div>
这是完整的代码。

<?php
  global $wpdb;
  $post_id = get_the_ID();
  $meta_value = \'wc_pay_per_post_product_ids\';

    $args = array(
        \'post_type\' => \'post\',
        \'meta_query\'     => array(
        array(
            \'post_id\' => get_the_ID(),
            \'key\'     => \'wc_pay_per_post_product_ids\',
            \'compare\' => \'EXIST\' // CHECK THE VALUE OF META KEY IF EXISTS?
        ) 
        )
    );

    if ($arg == TRUE) {
        echo \'<h1>The Meta Key Is Empty or NULL</h1><div class="row"><div class="col-2"></div><div class="col-10"></div></div>\';
    } else {
        echo \'<h1>The Meta Key Is NOT Empty or NULL</h1><div class="row"><div class="col-4">ONE</div><div class="col-4">TWO</div><div class="col-4">THREE</div></div>\';
    }

?>
以下是我的表格截图:

enter image description here

我遇到的问题是它总是返回结果;元密钥不为空或NULL“
1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

请注意compare 值为EXISTS 而不是EXIST. post_id 也是无效/标准parameter 对于元查询子句:)

但是\'compare\' => \'EXIST\' 相当于\'compare\' => \'=\', i、 e.默认比较值为=, 因此,您的元查询工作正常,结果中仅包含包含元的帖子(无论值是否为空)。

实际上,如果您只想检查一篇文章是否包含特定的元,那么不需要在那里进行元查询。

使用get_post_meta() 获取元值,然后执行if-else检查,如while 循环如下:

$args = array(
    \'post_type\' => \'post\',
);

// Get all matching posts, with and without the meta wc_pay_per_post_product_ids.
$query = new WP_Query( $args );

while ( $query->have_posts() ) : $query->the_post();
    // Get the meta value.
    $meta = get_post_meta( get_the_ID(), \'wc_pay_per_post_product_ids\', true );

    // Then do an if-else:
    if ( $meta ) {
        echo \'has meta<br>\';
    } else {
        echo \'has no meta<br>\';
    }
endwhile;
您还可以使用metadata_exists() 如果您不需要访问/了解元值:

if ( metadata_exists( \'post\', get_the_ID(), \'wc_pay_per_post_product_ids\' ) ) {
    echo \'has meta<br>\';
} else {
    echo \'has no meta<br>\';
}

相关推荐

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

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