Tengo un campo personalizado llamado startDate
pero solo en algunos eventos. Me preguntaba si no está configurado para una publicación que podría usar post_date
para generar la lista de publicaciones.
// if meta_key _postmeta.startDate isn't set get the rest by posts.post_date
query_posts(
array(
array(
'posts_per_page' => 10,
'meta_key' => 'startDate',
'meta_value' => date('Y-m-d'),
'meta_compare' => '<',
'orderby' => 'meta_value',
'order' => 'ASC'
),
array(
'meta_key' => 'post_date',
'meta_value' => date('Y-m-d'),
'meta_compare' => '<'
)
)
);
Respuestas:
Si puede explicarlo en SQL, ¡puede consultarlo! Hay tres lugares donde queremos cambiar la consulta predeterminada:
La unión y la cláusula where se agregan a través de la
_get_meta_sql()
función . La salida se filtra, por lo que podemos conectarla:La cláusula de orden se filtra a través de
posts_orderby
:Esto nos da la siguiente consulta SQL:
Recuerde desenganchar los filtros después de que realizó su consulta, de lo contrario también estropeará otras consultas. Y si es posible, no debe llamarse a
query_posts()
sí mismo , sino modificar la consulta de publicación principal que realiza WordPress mientras configura la página.fuente
functions.php
archivo de tu tema . Luego, justo antes de ejecutar la consulta, coloca las dosadd_filter()
líneas. Después de la consulta, escriberemove_filter( 'get_meta_sql', 'wpse12814_get_meta_sql' ); remove_filter( 'posts_orderby', 'wpse12814_posts_orderby' );
para eliminarlos nuevamente.intente algo como:
fuente
Una consulta que realiza una llamada realiza solo una consulta, no dos. Entonces no, no puede hacer que haga dos consultas separadas y luego concatene los resultados.
Recuerde, está seleccionando un conjunto de publicaciones aquí y luego mostrándolas. Ese conjunto se selecciona de una vez. Si desea obtener dos conjuntos separados de publicaciones y luego fusionarlas, entonces eso es algo que tendrá que hacer usted mismo con get_posts o similar.
fuente