• Здравствуйте, возникла проблема — не могу сообразить как получить только те записи, где поле контента заполнено?
    WP позволяет указать только заголовок записи, этого достаточно для сохранения. Соответственно встала задача отфильтровать записи с пустым контентом. Может кто подскажет, как это делается через get_posts?
    Заранее спасибо

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • проверяйте наличие текста через функцию get_the_content.

    Автор gwyllium

    (@gwyllium)

    Прошу прощения, а можно поподробнее?

    Я еще не сильно силен в WP. Как использовать эту функцию в get_posts?

    не в get_posts, а уже после — при выводе записей. добавляем функцию:

    function empty_content($str) {
        return trim(str_replace(' ','',strip_tags($str))) == '';
    }

    в цикле вывода записей проверяем на наличие контента:

    if (empty_content($post->post_content)) { ... }

    Автор gwyllium

    (@gwyllium)

    Суть проблемы в том, что мне нужно отфильтровать на этапе получения записей. Иначе получается, что я запрашиваю 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');

    Автор gwyllium

    (@gwyllium)

    Спасибо большое за ответ. Я сделал как вы писали. Закинул функцию фильтра в 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, кажется подобные трюки только с ним работают.

Просмотр 7 ответов — с 1 по 7 (всего 7)

Тема «Отфильтровать записи с пустым контентом» закрыта для новых ответов.