web-dev-qa-db-ja.com

Post_excerptが記入されている投稿のみを取得する

抜粋のある投稿のみを返すためにget_postsを使用しようとしています。たくさんの検索を行い、クエリに "posts_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;
}
1
patnz

post_excerpt列は文字列であり、 "IS NOT NULL"を使用してフィルタすることはできません。空の文字列をクエリするには、!=演算子を使用できます。

function posts_where_excerpt_not_empty( $where ) {
    $where .= " AND post_excerpt != '' ";
    return $where;
}

また、get_postsはデフォルトでフィルタを抑制するため、suppress filtersをfalseに設定して呼び出すか、別のクエリメソッドを使用する必要があります。

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

私は間違っているかもしれませんが、「空かどうかを確認する」という条件を使わないでください。

<?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!';
} ?>


これは、チェックから取得したコンテンツを表示するページのループ内にあるはずです。

0
Sagive SEO