Veo que muchas personas prefieren usar el gancho pre_get_posts en lugar de query_posts
¡Hurra!
Así pre_get_posts
filtra un WP_Query
objeto que significa cualquier cosa que podría hacer a través de query_posts()
usted puede hacer a través de $query->set()
y $query->get()
. En particular, podemos hacer uso del meta_query
atributo (ver Codex ):
$meta_query = array(
array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
),
);
$query->set('meta_query',$meta_query);
Pero ... esto reemplaza la 'meta consulta' original (si tuviera una). Entonces, a menos que desee reemplazar por completo la meta consulta original, sugiero:
//Get original meta query
$meta_query = $query->get('meta_query');
//Add our meta query to the original meta queries
$meta_query[] = array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
);
$query->set('meta_query',$meta_query);
De esta forma, agregamos nuestra metaconsulta junto con las meta consultas existentes.
Es posible que desee / no establecer la relation
propiedad de $meta_query
to AND
o OR
(para devolver publicaciones que satisfagan todas, o al menos una, metaconsultas).
* Nota: Este tipo de consulta devolverá publicaciones con la metaclave 'presentada', pero cuyo valor no es yes
. No incluirá publicaciones en las que la metaclave 'destacada' no exista. Podrás hacer esto en 3.5 .
Yes
y lasNo
opciones y 'No' se seleccionarán por defecto. Cuando quiera presentar una publicación, seleccionaréYes
. Sin embargo, quiero que las últimas 5 publicaciones permanezcan destacadas y otras se muestren en la consulta principal. No quiero volver y cambiar la selección cada vez, así que tengo que encontrar una manera de excluir solo las 5 publicaciones más recientes. Veo muchas preguntas similares sobre stackexchange y debería haber una manera fácil de administrar esas publicaciones destacadas. (una forma que no afecta el rendimiento general, no crea muchas consultas o requiere consultas sql mixtas)Yes
oNo
valor para todas las publicaciones. Sería genial excluir aquellas publicaciones que simplemente carecen de lafeatured
clave.Uncaught Error: [] operator not supported for strings
error ya que el originalmeta_query
volvía a ser nulo. Se puede conseguir alrededor de él por la caída de nuevo a una matriz vacía si no existe ninguno de conmutación de salida$meta_query = $query->get('meta_query');
para$meta_query = ( is_array( $query->get('meta_query') ) ) ? $query->get('meta_query') : [];
.Quiero publicar mi solución temporal para publicaciones destacadas en caso de que algunas personas puedan utilizarla. No uso el
pre_get_posts
gancho aquí, peroquery_posts
tampoco. El problema es que tengo que jugar con la consulta principal y ejecutar una consulta SQL. Me encantaría que algún experto pudiera verificar el código y hacerme saber si está bien y no causará problemas de rendimiento. También será genial si alguien tiene un mejor enfoque y lo comparte con nosotros.Crear consulta de publicaciones destacadas
Cree la consulta principal, excluya las publicaciones que tienen la meta_key destacada, limite la exclusión a las 5 publicaciones más recientes y muestre todas las demás.
fuente
En respuesta @Carlisle, si desea excluir las 5 publicaciones recientes marcadas como destacadas, puede hacer lo siguiente. Cambie posts_per_page a cuántos desea excluir y meta_query a cómo está designando la categoría destacada.
fuente