Necesito hacer un WP_Querycon un LIKEen el post_title.
Empecé con este regular WP_Query:
$wp_query = new WP_Query(
array (
'post_type' => 'wp_exposants',
'posts_per_page' => '1',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'ASC',
'paged' => $paged
)
);
Pero lo que realmente quiero hacer se ve así en SQL:
$query = "
SELECT *
FROM $wpdb->posts
WHERE $wpdb->posts.post_title LIKE '$param2%'
AND $wpdb->posts.post_type = 'wp_exposants'
ORDER BY $wpdb->posts.post_title
";
$wpdb->get_results($query);
La salida imprime los resultados que estoy esperando, pero utilizo el habitual <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>para mostrar los resultados.
Y eso no está funcionando $wpdb->get_results().
¿Cómo puedo lograr lo que describí aquí?

$wpdb->prepare().prepare().$wpdb->prepare('LIKE "%s%%"', 'banana')volvería"LIKE ''banana'%'", por lo que tenemos que construir la consulta nosotros mismos y también hacer el escape.prepare(). Sí, eso es complicado y tuve que intentarlo varias veces antes de solucionarlo. De algo que acabo de hacer:$wpdb->prepare( ' AND {$wpdb->posts}.post_title LIKE %s ', esc_sql( '%'.like_escape( trim( $term ) ).'%' ) ). Y estoy bastante seguro de queesc_sql()es innecesario y solo paranoico.'(apóstrofe) dentro. Supongo que es por escapar? Todavía no encontré la soluciónSimplificado:
fuente
Quería actualizar este código en el que trabajaron para WordPress 4.0 y superior, ya que esc_sql () está en desuso en 4.0 superior.
El resto de las cosas es igual.
También quiero señalar que puede usar la variable s dentro de los argumentos WP_Query para pasar los términos de búsqueda, que también buscará el título de la publicación, creo.
Me gusta esto:
fuente
search_prod_titlees exactamente ? ¿Debo cambiar esto a otra cosa?esc_sqldepricated? No es.$wpdb->escapeaunque ... developer.wordpress.org/reference/functions/esc_sqlCon alguna solución vulnerable publicada aquí, vengo con una versión un poco simplificada y desinfectada.
Primero, creamos una función para el
posts_wherefiltro que le permite mostrar solo publicaciones que coinciden con condiciones específicas:Ahora agregamos
cc_search_post_titlea nuestros argumentos de consulta:Y finalmente envuelva el filtro alrededor de la consulta:
Usando get_posts ()
Ciertas funciones que recuperan publicaciones no ejecutan filtros, por lo que las funciones de filtro posts_where que adjunte no modificarán la consulta. Si planea usar
get_posts()para consultar sus publicaciones, debe establecerlosuppress_filtersen falso en su matriz de argumentos:Ahora puedes usar
get_posts():¿Qué pasa con el
sparámetro?El
sparámetro está disponible:Al agregar su término de búsqueda en el
strabajo de parámetros y buscará el título de la publicación, también buscará el contenido de la publicación.¿Qué pasa con el
titleparámetro que se agregó con WP 4.4?Pasar un término de búsqueda al
titleparámetro:Mayúsculas y minúsculas y
LIKE, no%LIKE%. Esta búsqueda mediahellono devolverá la publicación con títuloHello WorldoHello.fuente
Sobre la base de otras respuestas que tengo ante mí, para proporcionar flexibilidad en la situación en la que desea buscar una publicación que contenga una palabra en un metacampo O en el título de la publicación, doy esa opción a través del argumento "title_filter_relation". En esta implementación, solo permito las entradas "OR" o "AND" con un valor predeterminado de "AND".
Aquí hay un ejemplo del código en acción para una publicación muy simple tipo "faq" donde la pregunta es el título de la publicación en sí:
fuente
WP_Querypoder acceder a ellos dentro delposts_wherefiltro.