所以...如果'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。请帮忙...
#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。
评论
您正在使用哪个版本的WordPress?@MikeSchinkel-对不起,迈克,没看到这个-是3.1。
WP 3.5解决了此问题,并允许您使用其他比较方法