WordPress:使用meta_query排除帖子 - 并非每个帖子都有meta_field

时间:2016-01-07 18:25:00

标签: php wordpress custom-fields

我想要使用自定义元字段的特定值排除每个帖子。 问题是,并非每个帖子都有这个元字段。

我的代码看起来像这样(工作循环的摘录):

// WP_Query arguments
        $args = array (
            'post_parent'   => $parentid,
            'orderby'       => 'menu_order',
            'order'         => 'ASC',
            'post_type'     => array( 'page' ),
            'meta_query' => array(
                array(
                    'key' => 'hide',
                    'value' => 1,
                    'compare' => '!='
                )
            )
        );

并非每个帖子都使用该字段"隐藏"。一些帖子给出了一个NULL。 所以我认为,循环因为这个而不起作用?!

这是对的吗?是否有必要每个帖子都有该密钥的值?

3 个答案:

答案 0 :(得分:4)

另一种方法:

     BottomNavigationBarItem(
        activeIcon: ShaderMask(
          shaderCallback: (Rect bounds) {
            return RadialGradient(
              center: Alignment.topLeft,
              radius: 0.5,
               colors: <Color>[Colors.red, Colors.yellow],
              tileMode: TileMode.repeated,
            ).createShader(bounds);
          },
          child: Icon(FontAwesomeIcons.home, ***color: Colors.white***),
        ),
        icon: new Icon(FontAwesomeIcons.home, color: Colors.grey),
        title: new Text('Home'),
      ),

答案 1 :(得分:2)

尝试通过以下代码段来检查您的SQL语句。

$customPosts = new WP_Query($yourArgs);
echo "Last SQL-Query: {$customPosts->request}";

答案 2 :(得分:1)

这是旧文章,但无论如何都要回答。此问题中的元查询将仅返回具有该元键的帖子的结果。要还返回根本没有该元关键字的帖子,您需要一个附加的元查询。示例:

// WP_Query arguments
$args = array (
    'post_parent'   => $parentid,
    'orderby'       => 'menu_order',
    'order'         => 'ASC',
    'post_type'     => array( 'page' ),
    'meta_query'    => array(
        'relation'  => 'OR',
        array(
            'key'       => 'hide',
            'value'     => 1,
            'compare'   => '!='
        ),
        array(
            'key'       => 'hide',
            'compare'   => 'NOT EXISTS'
        )
    )
);

请注意使用“关系”和第二个元查询,其比较值为“ NOT EXISTS”。