Veo que muchas personas prefieren usar el gancho pre_get_posts en lugar de query_posts
¡Hurra!
Así pre_get_postsfiltra un WP_Queryobjeto 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_queryatributo (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 relationpropiedad de $meta_queryto ANDo 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 .
Yesy lasNoopciones 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)YesoNovalor para todas las publicaciones. Sería genial excluir aquellas publicaciones que simplemente carecen de lafeaturedclave.Uncaught Error: [] operator not supported for stringserror ya que el originalmeta_queryvolví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_postsgancho aquí, peroquery_poststampoco. 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