仅当meta_value不为空时才显示帖子


36

已经有三个人尝试解决此问题,而我们提出的目标是零。我只想显示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

齐尔奇 请帮忙...


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

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

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

Answers:


6

@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年

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

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

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

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

57

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

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

没有时间创建用于测试结果的字段,但是我一直在观察我今天使用的查询,并注意到NOT IN它将愉快地使用一个空数组。


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

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

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

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

10

这是一个古老的问题,但似乎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' => '!=' 就我的测试而言。

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

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)插件创建了元值。

在Codex中阅读有关自定义字段参数的更多信息



3

我想念什么吗?

<?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

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

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

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

@Nathan这就是意见。
kaiser

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.