проверяйте наличие текста через функцию get_the_content.
Прошу прощения, а можно поподробнее?
Я еще не сильно силен в WP. Как использовать эту функцию в get_posts?
не в get_posts, а уже после — при выводе записей. добавляем функцию:
function empty_content($str) {
return trim(str_replace(' ','',strip_tags($str))) == '';
}
в цикле вывода записей проверяем на наличие контента:
if (empty_content($post->post_content)) { ... }
Суть проблемы в том, что мне нужно отфильтровать на этапе получения записей. Иначе получается, что я запрашиваю 10 записей, а реально их выведется только 6. С пагинацией в этой ситуации тоже будут проблемы, как я понимаю.
стандартно не выйдет.
можно перед query_posts включить фильтр:
add_filter('posts_where', 'filter_where');
сам фильтр (в functions.php):
function fitler_where($where = ''){
$where .= "AND trim(coalesce(post_content, '')) <>''";
}
после query_posts отключаем фильтр:
remove_filter('posts_where', 'filter_where');
Спасибо большое за ответ. Я сделал как вы писали. Закинул функцию фильтра в functions.php темы. Пишу:
add_filter('posts_where', 'filter_where');
$posts = get_posts( array(
'numberposts' => 10,
'post_type' => 'post',
'post_status' => 'publish',
'suppress_filters' => false
) );
remove_filter('posts_where', 'filter_where');
Первый же элемент массива posts имеет пустое поле post_content
Также выдается warning:
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function ‘filter_where’ not found or invalid function name in /home/……../www/wp-includes/plugin.php on line 291
Не совсем понимаю что я делаю не так.
переделайте цикл под WP_Query, кажется подобные трюки только с ним работают.