WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Вопрос по WP_Query

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

global $post;
$args = array( 'posts_per_page' => 4, 'offset'=> 1, 'category' => 33 );
$myposts = get_posts( $args );

foreach( $myposts as $post ){
	setup_postdata($post);

	get_template_part( 'content', get_post_format() );

}
wp_reset_postdata();

(здесь обрезает код)

Мне нужно добавить фильтр, чтобы выводились только те записи, в которых в тексте есть определенное слово или дата, например "18.10.2019"

То есть чтобы из категории 33 вывелись записи в который в тексте встречается - 18.10.2019
Это возможно сделать?

0
bakus
месяц назад
  • 1
    Maestro39 bagroup.pro

    Как по мне достаточно бредовая идея. Лучше добавить мета поле и сравнивать его в "where" Смотрите WP_Query

    Но все же допустим что такую задачу реализовать крайнее важно. И так, то что мы ищем лежит в колонке "post_content" поехали.

    <?php
    global $post; // Не знаю зачем делаете переменную глобальной, но вдруг она вам нужна.
    
    // Делаем запрос в базу данных:
    $post = new WP_Query(array(
    	'cat'               => 33,
    	'post_type'         => 'post',
    	'offset'            => 1,
    	'posts_per_page'    => 4,
    ));

    В цыкле прогоним записи и те которые подходят будем выводить

    <?php
    $needle = '18.10.2019' // Фраза которую ищем
    if ( $post->have_posts() ){
    	while( $post->have_posts() ){ $post->the_post();
    		// Пропускаем шаг цыкла если фразы в строке нету.
    		if ( strripos($post->post->post_content, $needle) === false ) continue;
    
    		get_template_part( 'content', get_post_format() );
    	}
    }
    // Возвращаем оригинальные данные поста. Сбрасываем $post.
    wp_reset_postdata();

    Код не тестировал, но вроде должно работать. Будут проблемы сообщите.

    bakus месяц назад

    К сожалению не работает. Но спасибо что ответили

    Maestro месяц назад

    Что именно не работает? Подозреваю что проблема может быть в том что у первых 4 записей нету искомого значения. Можно таким же способом в цыкле в массив записать id записей у которых есть искомая строка. Только в запросе надо пост пер пейдж -1. Прогоните все записи и получите массив с айдишниками записей у которых есть. Потом делаете еще запрос только уже получаете записи по их ид из массива. В цыкле гоните и выводите.

    Maestro месяц назад

    Распечатайте запрос и посмотрите какие данные там есть. Возможно не надо указывать тип записи. После запроса

    <?php
    echo print_r($post, true);

    Только в pre оберните, редактор сайта не даёт этого сделать
    Смотрите WP_OBJECT post там должны быть данные.

    Комментировать
  • 0

    Это тоже не выход, либо использовать like/rlike и после кэшировать результат, либо добавить полнотекстовый индекс.

    Комментировать
  • 1
    petrozavodsky790 alkoweb.ru

    не очень производительный вариант но можно использовать параметр поиска
    примерно так - https://wp-kama.ru/function/query_posts#search

    $args = array( 'posts_per_page' => 4, 'offset'=> 1, 'category' => 33, 's'=>"18.10.2019" );
    bakus 25 дней назад

    Спасибо большое! То,что нужно! работает!))

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация