已经有三个人试图解决这个问题,而我们的目标是零。我只想显示在meta_key'featured_image'中具有值的帖子。

所以...如果'featured_image'不为空,则显示该帖子。这是代码:

      <ul>
      <?php
      $args = array(
        'showposts' => 5,
        'meta_query' => array(
          array(
            'key' => 'featured_image',
            'value' => '',
            'compare' => '!='
            )
          )
      );
      $ft_pagination = new WP_Query( $args );
      ?>
      <?php while ($ft_pagination->have_posts()) : $ft_pagination->the_post(); ?>
        <?php $ftimage = get_post_meta(get_the_id(), 'featured_image', TRUE); ?>
        <li>
          <article>
            <a href="">
            <?php if ($ftimage): ?>
              <img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=<?php echo $ftimage; ?>&w=84&h=60" alt="" />
            <?php else: ?>
              <img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=/wp-content/themes/ssv/images/review-default.gif&w=84&h=60" alt="" />
            <?php endif; ?>
            </a>
          </article>
        </li>
      <?php
      endwhile;

      wp_reset_query();
      ?>
      </ul>


我们已经尝试了我们可以想到的每种组合,已弃用的meta_ *选项,query_posts,get_posts,而不是WP_Query ...什么也没有。打印选择语句,不显示任何元值字段。它存在-用于帖子(用于每个帖子),并且存在于数据库中。

我们已经看到了关于该主题的每个帖子,包括:

query_posts,并且仅在自定义字段不为空的情况下显示结果

http://scribu.net/wordpress/advanced-metadata-queries.html

Zilch。请帮忙...

评论

您正在使用哪个版本的WordPress?

@MikeSchinkel-对不起,迈克,没看到这个-是3.1。

WP 3.5解决了此问题,并允许您使用其他比较方法

#1 楼

@Rob,您好:

您无法弄清楚该怎么做的原因是因为它是不可能的,至少在没有SQL的情况下是不可能的。尝试将以下内容添加到主题的functions.php文件中:

add_filter('posts_where','yoursite_posts_where',10,2);
function yoursite_posts_where($where,$query) {
  global $wpdb;
  $new_where = " TRIM(IFNULL({$wpdb->postmeta}.meta_value,''))<>'' ";
  if (empty($where))
    $where = $new_where;
  else
    $where = "{$where} AND {$new_where}";
  return $where;
}


如果您有具有空值的自定义'featured_image'字段,则上面的内容将对其进行过滤。如果您还有其他问题,我们将不得不看看您的数据将如何解决。

我很好奇的一件事;您如何获得'featured_image'的空值? WordPress 3.1中的管理界面会尽力防止您输入空值。
希望这会有所帮助。

评论


谢谢上帝,所以不仅仅是我们。我想知道这很好。谢谢@MikeSchinkel-他们真的应该将其放入抄本中...期待解释。谢谢!!

– Robalan
2011年3月2日在6:10

@Rob-所以我不懂3.0的知识,现在我正在3.1中对其进行测试,它似乎确实有效。我有两篇文章,一篇有一个features_image自定义字段,您的查询工作正常。你在找什么?您的查询是否有机会加载确实具有featured_image自定义字段但该字段的值为空的帖子?

– MikeSchinkel
2011-3-2在6:45



@MikeSchinkel-开玩笑吗?是的,这正是它的作用-每个帖子都具有featured_image字段,但并没有全部设置好。无论如何,它正在加载所有帖子。

– Robalan
2011年3月2日在7:20

@Rob-查看我的最新答案。

– MikeSchinkel
2011-3-2在7:48

@MikeSchinkel-谢谢!在查询中还设置了post_type之后,它似乎运行得很好。空值是有目的的-并非每个帖子都有此特色图片(我知道帖子的缩略图,这对本网站来说不是一个很好的选择)。非常感谢!

– Robalan
2011年3月2日15:14



#2 楼

这似乎可以将值添加到查询中,但不确定是否会提取有效结果。.

'meta_query' => array(
    array(
        'key' => 'some_key',
        'value'   => array(''),
        'compare' => 'NOT IN'
    )
)


没有时间创建字段来测试结果,但我一直在关注今天使用的查询,并注意到NOT IN会很乐意接受一个空数组。

评论


我知道这是一个旧答案,但是对于那些尝试这种方法的人来说,它可以使用'compare'=>'NOT LIKE'而不是'NOT IN'

–handsofaten
2012年7月11日17:10

使用!=肯定比不使用in或not like更有效。与wordpress.stackexchange.com/a/10286/32863相同(关于元键,但原理相同)

–亚当
2015年9月9日19:22

更干净的解决方案:就像亚当已经说过的那样。用于:'value'=>'','compare'=>'!='

–马丁·霍夫(Martijn van Hoof)
18年4月20日在8:32

如果您需要检查以确保它不是一个空数组...'value'=> array('',array(),serialize(array())),'compare'=>'NOT IN'

– StephanieQ
18年8月14日在16:39

#3 楼

这是一个古老的问题,但Wordpress似乎已修复了此“缺失功能”:现在,根据Wordpress Codex,可以检查元键的存在(或不存在),例如

'meta_query' => array(
    array(
        'key' => 'featured_image',
        'compare' => 'EXISTS', //or "NOT EXISTS", for non-existance of this key
    )
)


自WP> = 3.5起可用。

评论


EXISTS将显示空值,这不是我们在此处追求的。就我的测试而言,最好的解决方案是'value'=>'','compare'=>'!='。

–本
19年8月9日在13:28

@Ben这正是OP尝试的方法,但似乎没有成功。我添加了解决方案,以确保通过搜索基于meta_key的存在来检索帖子的方法的人能够找到它。由于元数据的值可以是“某物”,“空”或“空”(以防元数据不存在),因此最好的解决方案是将两个选项与“与”关系合并

– Erenor Paz
19年8月9日在16:06

#4 楼

这是为我工作的查询。与2011年t31os的答案中的比较非常相似,但是由于meta键/值只是一个简单的文本字符串,因此不必是meta_query数组。

$args = array(
    'posts_per_page' => 5,//replaced 'showposts' in version 2.1
    'meta_key' => 'featured_image',
    'meta_value' => array(''),
    'meta_compare' => 'NOT IN'
);


无论出于何种原因,使用'meta_value'=>''和'meta_compare'=>'!='或'meta_compare'=>'不喜欢'仍会为我拉出所有帖子,但这可能与我使用高级自定义字段(ACF)插件创建元值的事实。

了解有关法典中自定义字段参数的更多信息。

#5 楼

这已在WP 3.2-alpha中修复:

http://core.trac.wordpress.org/ticket/15292

#6 楼

我想念什么吗?

<?php 
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => -1,
        'meta_key' => "featured_image"
    );
    $the_query = new WP_Query( $args ); 

?>


不是吗?

评论


编辑:从抄本:$ query = new WP_Query('meta_key = featured_image');看这里:codex.wordpress.org/Class_Reference/…

– Infinity Media
2014年1月24日21:50



首先,您始终可以编辑问题或答案,而无需添加评论。第二:不要滥用答案而不是评论。

– kaiser
14年1月25日,0:05

如果您有新问题,请单击“提问”按钮提问。如果它有助于提供上下文,请包括指向该问题的链接。

– kaiser
14年1月25日,0:05

@kaiser-在我看来他在回答。他没有问他的代码是否有效,但是我想用他认为会起作用的方式讽刺地回答这个问题。

–内森(Nathan)
2016年9月5日下午4:19

@Nathan这就是意见。

– kaiser
16-9-5'7:42

#7 楼

如果希望元值存在并且具有除空字符串之外的其他值:
      'meta_query' => [
        'relation' => 'AND',
        [
          'key' => 'some_key',
          'compare' => 'EXISTS',
        ],
        [
          'key' => 'some_key',
          'compare' => '!=',
          'value' => ''
        ]
      ]


#8 楼

!has_featured_image();


一个内胆ftw。