Tengo un encargo posterior tipo "Listado" y yo quiero conseguir todos los listados que tienen un campo personalizado gateway_value != 'Yes'
, y ordenar los resultados por parte de otro campo personalizado, location_level1_value
. Puedo hacer que las consultas funcionen por separado, pero no puedo combinarlas:
Consulta 1 (ordenar por ubicación):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'post_status' => 'publish',
'posts_per_page' => '9',
'meta_key' => 'location_level1_value',
'orderby' => 'location_level1_value',
'order' => 'ASC',
'paged' => $paged
)
);
Consulta 2 (valor de campo personalizado! = Sí):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_key' => 'gateway_value',
'meta_value' => 'Yes',
'meta_compare' => '!=',
'paged' => $paged
)
);
Consulta combinada:
Miré al códice para obtener ayuda con esto, pero la siguiente consulta no funciona:
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'gateway_value',
'value' => 'Yes',
'compare' => '!='
),
array(
'key' => 'location_level1_value'
)
),
'orderby' => "location_level1_value",
'order' => 'ASC',
'paged' => $paged
)
);
¿Qué estoy haciendo mal con la consulta combinada?
[ACTUALIZACIÓN]: Entonces, ahora que se ha lanzado 3.1, la consulta combinada anterior todavía no funciona. Obtengo resultados, simplemente no ordenados correctamente.
[ACTUALIZACIÓN]: var_dump($wp_query->request)
proporciona lo siguiente:
string(527) " SELECT SQL_CALC_FOUND_ROWS wp_7v1oev_posts.* FROM wp_7v1oev_posts
INNER JOIN wp_7v1oev_postmeta ON (wp_7v1oev_posts.ID = wp_7v1oev_postmeta.post_id)
INNER JOIN wp_7v1oev_postmeta AS mt1 ON (wp_7v1oev_posts.ID = mt1.post_id) WHERE 1=1 AND wp_7v1oev_posts.post_type = 'listing' AND (wp_7v1oev_posts.post_status = 'publish') AND wp_7v1oev_postmeta.meta_key = 'gateway_value' AND CAST(wp_7v1oev_postmeta.meta_value AS CHAR) != 'Yes' AND mt1.meta_key = 'location_level1_value' ORDER BY wp_7v1oev_posts.post_date DESC LIMIT 0, 9"
fuente
meta_query
parámetro es nuevo en 3.1, que se lanzará muy pronto, pero la versión estable actual sigue siendo 3.0.5, sin este parámetro.Respuestas:
Puede usar la consulta para filtrar el contenido según lo previsto utilizando 'meta_query' con opciones de filtrado, y para la parte del pedido, simplemente agregue / modifique los siguientes parámetros:
'order' => 'ASC'
fuente
Al igual que Jan dijo en el nuevo WordPress 3.1 que puede usar,
meta_query
pero hasta que salga, puede usar su Primera consulta para ordenar y filtrar dentro de su bucle de la siguiente manera:y agrega este código a tus funciones.php
ahora esto debería funcionar.
fuente
gateway_value == "Yes"
hubieran estado sin el condicional ... ¿Alguna idea sobre cómo solucionarlo?Disculpas por responder mi propia pregunta:
Mirando [http://core.trac.wordpress.org/ticket/15031font>[1], parece que este es un problema conocido. Lo he arreglado (¿pirateado?) Para que funcione usando
post_filter
, así (solo para referencia de cualquiera que pueda estar buscando la misma respuesta):En functions.php ###
Wp_query modificado en el archivo de plantilla ###
fuente