WP_QUERY Получать сообщения по категориям и похожим названиям (Like)

У меня небольшая проблема с WP_Query . Я хочу, чтобы сообщения были отфильтрованы по категориям и с похожим именем проекта (например, query), поэтому я пытаюсь использовать этот код:

 $args=array( 'post_type' => 'post', 'post_status' => 'publish', 'category_name' => 'projects', 'name__like' => 'Proj'); $my_query = null; $my_query = new WP_Query($args); if( $my_query->have_posts() ) { while ($my_query->have_posts()) : $my_query->the_post(); echo '<div class="Entradas">'.get_the_title().'</div>'; endwhile; } wp_reset_query(); 

Фактически он отображает проекты, отфильтрованные по категориям, но name__like не работает.

Любые предложения по исправлению этого?

Повторный и упрощенный ответ:

Можешь попробовать:

 $args = [ 'post_type' => 'post', 'post_status' => 'publish', 'category_name' => 'projects', '_name__like' => 'proj*' // <-- our new input argument! ]; $my_query = new WP_Query( $args ); 

где мы создали входной аргумент _name__like . Он поддерживает подстановочный знак * , например:

  '_name__like' => 'a*b*' 

Обратите внимание, что в проектах сообщений нет post_name установленных до их публикации .

Мы используем следующий плагин для поддержки этого нового аргумента:

 /** * Plugin Name: Support for post name like in WP_Query * Description: Uses the _name__like argument and supports wildcard *. * Plugin URI: http://wordpress.stackexchange.com/a/136758/26350 * Author: Birgir Erlendsson (birgire) * Version: 0.0.1 */ add_filter( 'posts_where', function( $where, $q ) { if( $name__like = $q->get( '_name__like' ) ) { global $wpdb; $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_name LIKE %s ", str_replace( array( '**', '*' ), array( '*', '%' ), mb_strtolower( $wpdb->esc_like( $name__like ) ) ) ); } return $where; }, 10, 2 ); 

Я не использовал никаких name__like или фильтров. Вот как я, наконец, сделал это:

 $categoria = $_GET['categoria']; $filtro = $_GET['texto']; $args = array( 'post_type' => 'post', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => $categoria ) ) ); $my_query = null; $my_query = new WP_Query( $args ); if( $my_query->have_posts() ) { while ($my_query->have_posts()) : $my_query->the_post(); $postid = $_GET['id']; $content_post = get_post($postid); $contenido= $content_post->post_content; $titulo= $content_post->post_title; if($filtro!="") { $tit=strtoupper($titulo); $fil=strtoupper($filtro); $con=strtoupper($contenido); if ((strpos($tit,$fil) !== false) || (strpos($con,$fil) !== false) ) { echo '<div class="Entradas">'.$titulo.'</div>'; } } else { echo '<div class="Entradas">'.$titulo.'</div>'; } endwhile; echo '[|Contador|]'.$my_query->post_count; //this is for displaying the number of posts } wp_reset_query(); 

Поэтому я получаю сообщения, и я проверяю, содержит ли их заголовок или контент значение, которое я ищу, я уверен, что должны быть решения с использованием параметров WP_Query, но я предпочитаю этот способ.