Me pregunto si es posible filtrar por título de publicación O taxonomía personalizada.
Por ejemplo: busco ‘humano’, quiero mostrar las publicaciones que contienen la palabra ‘humano’ en el título de la publicación y la categoría ‘humano’.
-No excluir publicaciones si la categoría ‘humano’ no existe y hay publicaciones con el título ‘humano’
-No excluir publicaciones si existe la categoría ‘humano’ y hay publicaciones con el título ‘humano’ (recuperar todas las publicaciones que contienen la palabra ‘humano’ y todas las publicaciones con la categoría ‘humano’)
Creo que debería probar este filtro. posts_where
Método 1:
en el archivo functions.php
<?php
add_filter( 'posts_where', 'title_like_posts_where', 10, 2 );
function title_like_posts_where( $where, &$wp_query ) {
global $wpdb;
if ( $post_title_like = $wp_query->get( 'post_title_like' ) ) {
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( $wpdb->esc_like( $post_title_like ) ) . '%\'';
}
return $where;
}
?>
Luego pasa argumentos como:
$args = array(
'post_title_like' => $str
);
$res = new WP_Query($args);
Método 2:
$mypostids = $wpdb->get_col("select ID from $wpdb->posts where post_title LIKE '".$str."%' ");
$args = array(
'post__in'=> $mypostids,
'post_type'=>'post',
'orderby'=>'title',
'order'=>'asc'
);
$res = new WP_Query($args);
while( $res->have_posts() ) : $res->the_post();
// put your logic here
endwhile;
No estoy seguro de si encontraste una solución para esto o no, pero creo que la respuesta de Gufran no es exactamente la que resuelve el problema.
También necesitaba hacer una búsqueda dentro del título, contenido, extracto O nombres de categoría y me encontré con un problema porque la consulta excluye los resultados que están fuera de la categoría. Mi solución fue hacer 2 consultas y combinar los resultados.
//search within title of category
$args1 = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 500,
'orderby' => 'title',
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'title',
'terms' => 'human',
)
)
);
//search within title/excerpt/content
$args2 = array(
's' => 'human',
'post_type' => 'businesses',
'post_status' => 'publish',
'posts_per_page' => 500,
'orderby' => 'title',
'order' => 'ASC'
);
$query1 = new WP_Query($args1);
$query2 = new WP_Query($args2);
$loop = new WP_Query();
$loop->posts = array_merge( $query1->posts, $query2->posts );
//populate post_count count for the loop to work correctly
$loop->post_count = $query1->post_count + $query2->post_count;
Hola, encontraste solucion a esto? Estoy en el mismo barco.
– Jeff
13 oct 2018 a las 15:26