Извлекайте только сообщения, в которых была заполнена выдержка из сообщения


Я пытаюсь использовать 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;
}
Author: patnz, 2011-11-07

2 answers

Столбец post_excerpt является строкой и не может быть отфильтрован с помощью "НЕ РАВНО НУЛЮ". Для запроса пустой строки вы можете использовать оператор !=.

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

Также get_posts по умолчанию подавляет фильтры, поэтому вам нужно будет вызвать его с помощью подавления фильтров, установленных в значение false, или использовать другой метод запроса.

$posts = get_posts( array( 'suppress_filters' => FALSE ) );
 2
Author: Chris_O, 2011-11-08 06:03:08

Возможно, я ошибаюсь, но не сработает ли условие "проверить, пусто ли"?

<?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
Author: Sagive SEO, 2011-11-07 19:54:49