Задача с WP_Query
Недавно видел где-то тут было что-то похожее, но не нашел когда надо..
Суть проблемы..
Получаю записи через WP_Query, всё норм..
Но если задать фильтр в коде, то стандартно отфильтровать не выходит, из за чего в пагинации много пустых страниц получилось..
А фильтр.. это вывод определенных постов (стандартно) в которых найдена определенная фраза (тут проблема)..
while( $posts->have_posts() ){ $posts->the_post(); $id = get_the_ID(); $title = get_the_title(); $post = get_post(); $text = $post->post_content; $text = preg_replace( '@<(' . $ignore . ')[^>]*?\>.*?</\\1>@si','',$text); $text = preg_replace( '/\<\/?[^>]+>/U','',$text); $n=0; foreach($keys as $key) { preg_match($key['search'],$text,$matches); $text = preg_replace($key['search'],'',$text,1); if(isset($matches[0])) { $return .= '<tr ' . $alternate . '> <td class="column-name">' . $id . '</td> <td class="column-name">' . $title . '</td> <td class="column-name">' . $key['title'] . '</td> <td class="column-name">' . $matches[0] . '</td> </tr>'; $id = ''; $title = ''; $n++; } } unset($text); if($n === 0) { $return .= '<tr ' . $alternate . '> <td class="column-name">' . $id . '</td> <td class="column-name">' . $title . '</td> <td class="column-name">X</td> <td class="column-name">X</td> </tr>'; } else { $posts_count++; $keys_count = $keys_count + $n; } $alternate = (empty($alternate)) ? 'class="alternate"' : ''; }
Данную проблему удалось частично решить добавив фильтр в запрос..
$args['s'] = $val; $posts = new WP_Query($args);
..пустые страницы пагинации исчезли и проблемные (т.к. сложные параметры поиска) удалось удалить. Но при этом теперь на странице пагинации выводятся 6 (например) постов вместо 10, т.е. 10 (по умолчанию) - 4 проблемные, что терпимо, но не до конца устраивает, т.к. если будет 10 подряд проблемных постов, то мы получим пустую страницу.
Вопрос: Можно ли как то запихать свой обработчик в WP_Query или как то решить по другому, чтобы моя страница настроек плагина не конфликтовала с другими запросами на сайте.
Разобрался в итоге. Коварство wp в get_posts exclude, а в WP_Query post__not_in.
Так в итоге перебрал два раза и получил нужный результат.
Попробывал решить задачу с помощью include, exclude, но почему то игнорит..