eapo
en la plantilla de WordPress función.php siguiente código está funcionando bien
// Function accepting current query
function my_change_order( $query ) {
// Check if the query is for an archive
if($query->is_archive())
// Query was for archive, then set order
$query->set( 'order' , 'asc' );
// Return the query (else there's no more query, oops!)
return $query;
}
// Runs before the posts are fetched
add_filter( 'pre_get_posts' , 'my_change_order' );
Pero necesito ordenar artículos por clave meta personalizada como _my_meta_vip
. Basado en esta respuesta, intenté seguir las líneas, con la mitad de éxito, porque solo carga artículos con meta clave personalizada definida, faltan otros. ¿Cómo puedo solucionar eso?
function my_change_order( $query ) {
if($query->is_archive())
$query->set( 'orderby' , 'meta_value' );
$query->set( 'meta_key' , '_my_meta_vip' );
return $query;
}
add_filter( 'pre_get_posts' , 'my_change_order' );
¿Cómo puedo ordenar correctamente mis artículos por clave meta personalizada?
joyahuq
function my_change_order( $query ) {
// Check if the query is for an archive
if($query->is_archive())
// Query was for archive, then set order
$query->set( 'order' , 'asc' );
$query->set( 'meta_query', array(
array(
'key' => '_my_meta_vip'
)
));
// Return the query (else there's no more query, oops!)
return $query;
}
mira el siguiente tema: https://wordpress.stackexchange.com/questions/20237/using-meta-query-how-can-i-filter-by-a-custom-field-and-order-by-other-one te puede dar una idea clara
-
No puedo ver la diferencia y hacer lo mismo que mi código. 🙁
– eapo
22 mayo 2015 a las 19:34
-
ver meta_query es enviar es asignar y enviar a través de matriz
– jewelhuq
23 mayo 2015 a las 16:13
-
todavía no muestra publicaciones sin
_my_meta_vip
definido.– eapo
26 de mayo de 2015 a las 7:56
Finalmente, no puedo encontrar ninguna forma de enumerar todas las publicaciones con y sin _my_meta_VIP
definido.
En mi solución todo _my_meta_VIP
estaba lleno de enabled
o disabled
y el siguiente código hace el trabajo:
// Function accepting current query
function my_change_order( $query ) {
// Check if the query is for an archive
if($query->is_archive()) {
// Query was for archive, then set order
$query->set( 'post_type', 'profile' );
$query->set( 'orderby' , 'meta_value' );
$query->set( 'meta_key' , '_my_meta_vip' );
$query->set( 'order', 'DESC' );
} else {
// Return the original query for non-archive pages
return $query;
}
// Return the query
return $query;
}
// Runs before the posts are fetched
add_filter( 'pre_get_posts' , 'my_change_order' );
Mateo Tinsley
Parece que el problema subyacente aquí es que la consulta está realizando una unión interna en las publicaciones y las metatablas posteriores, por lo que la consulta no devuelve las publicaciones que no tienen esa metaentrada de publicación en particular. Lo que quieres es una combinación izquierda. Consulte esta respuesta para obtener una explicación de la diferencia.
Deberías poder usar el posts_join
filter para reemplazar la combinación interna con una combinación izquierda:
add_filter('posts_join', function($join) {
global $wpdb;
// Replace inner join with left join
$search="INNER JOIN " . $wpdb->postmeta;
$replace="LEFT JOIN " . $wpdb->postmeta;
$join = str_ireplace($search, $replace, $join);
return $join;
});