Estoy usando query_posts( $args )
para filtrar el Loop.
Quiero filtrar publicaciones según su meta_value
"voto", a veces más pequeño que, a veces igual y así sucesivamente ...
¡Definitivamente quiero usar la función query_posts()
y pasar mi filtro a través de $args
!
No quiero usar add_filter('posts_where', 'filter_where');
y luego agregar una declaración AND
a la consulta.
Quiero usar la funcionalidad dada de WordPress para filtrar publicaciones con meta_key
, meta_value
y meta_compare
como esto:
$args = array( 'meta_key'=>'vote', 'meta_compare'=>'>=', 'meta_value'=>5, 'posts_per_page'=>100 ) )
query_posts( $args );
El resultado de esto es:
SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') AND wp_postmeta.meta_key = 'vote' AND wp_postmeta.meta_value >= '5' GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 100
El problema de eso es:
wp_postmeta.meta_value >= '5'
Debería ser:
wp_postmeta.meta_value >= 5
Entonces funcionaría bien.
No entiendo por qué WordPress agrega citas.
Estoy usando el parámetro predefinido de WordPress ( <
, >
, <=
, >=
) y es obvio que esto solo funcionará con números y no con cadenas que deberían estar entre comillas.
La documentación dice:
Devuelve publicaciones con clave de campo personalizada de 'millas' con un valor de campo personalizado que es MENOR QUE O IGUAL A 22
query_posts('meta_key=miles&meta_compare=<=&meta_value=22');