仅检索已填写POST_EXCEPT的帖子

时间:2011-11-07 作者:patnz

我试图使用get\\u posts只返回包含摘录的帖子。进行了大量搜索,并一直尝试在查询中使用“posts\\u where”过滤器,但我的SQL缺乏。这就是我正在使用的东西,理论上我认为应该是可行的,但实际上我对sql一无所知,也不知道如何打印sql字符串来调试这个查询。。。

$args = array(
    \'post_type\' => \'testimonial\',
    \'numberposts\'     => 1,
    \'orderby\'         => \'rand\',
);

add_filter( \'posts_where\' , \'posts_where_excerpt_not_empty\' );

$post = get_posts($args);

remove_filter( \'posts_where\' , \'posts_where_excerpt_not_empty\' );

[...]

function posts_where_excerpt_not_empty( $where ) {
    $where .= " post_excerpt NOT NULL";
    return $where;
}

2 个回复
最合适的回答,由SO网友:Chris_O 整理而成

这个post_excerpt 列是字符串,不能使用“is not NULL”进行筛选。要查询空字符串,可以使用!= 操作人员

function posts_where_excerpt_not_empty( $where ) {
    $where .= " AND post_excerpt != \'\' ";
    return $where;
}
另外,默认情况下,get\\u posts会抑制过滤器,因此您需要在抑制过滤器设置为false的情况下调用它,或者使用其他查询方法。

$posts = get_posts( array( \'suppress_filters\' => FALSE ) );

SO网友:Sagive

我可能弄错了,但“检查是否为空”条件不会起作用吗?

<?php 
query_posts(array( 
\'post_type\' => \'testimonial\',
\'showposts\' => 1,
\'orderby\' => \'rand\'
) );  

$checExcerpt = get_the_excerpt();
if !($checExcerpt = \'\') {
// Put the echo commands here
} else {
echo \'Sorry You forgot to enter Descriptions.. search engine love does!\';
} ?>

我认为这应该在您要显示从检查中返回的内容的页面的循环中。。

结束