He estado modificando la búsqueda de WP incorporada utilizando el pre_get_posts
filtro, lo que permite al usuario ordenar las publicaciones (incluido un montón de tipos de publicaciones personalizadas) por diferentes campos.
Sin embargo, el problema que tengo es que cuando le digo a WP que ordene por un valor meta, excluirá todas las publicaciones que no tengan ese valor meta establecido. Esto hace que cambie la cantidad de resultados si cambia la ordenación de "Precio" a "Fecha" porque "Publicaciones" no tienen "Precio" establecido, pero sí "Elementos".
Esto no es lo que quiero, así que me gustaría saber si hay una manera de incluir TODAS las publicaciones, incluso aquellas que carecen del metavalor en el que estoy clasificando, y colocar las que no tienen el último valor.
Sé cómo ordenar en más de un campo, pero eso no ayuda.
Gracias
Parece que no soy el único con esta pregunta: ¿ forma de incluir publicaciones con y sin cierta meta_key en args para wp_query? Pero no hay solución allí.
Actualizar
He intentado la respuesta pero no estoy seguro si entendí correctamente, esto es lo que tengo ahora:
<?php
function my_stuff ($qry) {
$qry->set('meta_query', array(array(
'key' => 'item_price',
'value' => '',
'compare' => 'NOT EXISTS'
)));
$qry->set('orderby', 'meta_value date'); # Sorting works with meta_value as well as meta_value_num - I've tried both
$qry->set('order', 'ASC DESC');
$qry->set('meta_key', 'item_price');
}
El metavalor es un número (se usa para almacenar un precio como sugiere su nombre)
Actualización 2
He comentado el pedido y todo lo que tengo ahora es esto:
<?php
$qry->set('meta_query', array(array(
'key' => 'item_price',
'value' => '',
'compare' => 'NOT EXISTS'
)));
Con este código, la consulta parece devolver todas las publicaciones que no tienen la item_price
clave y ninguna de las publicaciones que la tienen. Es decir, el problema ahora se invierte.
Si agrego el código de pedido también obtengo 0 resultados.
Editar: ... tres años después ... : PI tuvo este problema nuevamente. Intenté todas las respuestas dadas y ninguna funciona. No estoy seguro de por qué algunas personas parecen pensar que funcionan, pero al menos no trabajan para mí.
La solución con la que terminé es usar el save_post
filtro, asegurándome de que todas las publicaciones tengan el campo personalizado en el que deseo ordenar. Es un poco molesto que tenga que hacerlo, pero mientras lo hagas pronto es probable que no tengas problemas.
En este caso, estaba creando un "contador de vistas" en las publicaciones y quería que los usuarios pudieran ordenar las publicaciones más leídas. Una vez más, las publicaciones que nunca se han visto (supongo que es bastante improbable, pero aún así) desaparecieron al ordenar el recuento de vistas. Agregué este bit de código para asegurarme de que todas las publicaciones tengan un recuento de vistas:
add_action('save_post', function ($postId) {
add_post_meta($postId, '_sleek_view_count', 0, true);
});
meta_query
y siempretax_query
son una, ya que combinan múltiples matrices. Segundo, como se menciona en mi respuesta, debe usarlo para los números. Es posible que también sea necesario definir realmente la (consulte la entrada de la página -Codex). Por último, no tiene sentido en y dirección. Eso no es posible. El delimitador de espacio solo funciona y no puede indicarle que ordene el primero y el segundo . Para eso está el filtro. array( array() )
meta_value_num
meta_value_num
WP_Query
order
ASC
DESC
orderby
ASC
DESC
posts_clauses
meta_value_num
entradas sean números reales . Visto con demasiada frecuencia que alguien dice que es un número, pero de hecho lo guarda como una cadena en la base de datos.
ASC DESC
es para que se clasifique en meta_value
in ASC
y date
in in DESC
, por lo que puedo decir, funciona.