publicaciones plugin personalizar para organizar ordenar noticias mover las etiquetas entradas como php arrays wordpress order meta-key

php - plugin - ¿Cómo consulto las publicaciones y uso el atributo ''orderby'' para ordenar las publicaciones en bucle según la fecha ''meta_value''?



plugin para mover entradas wordpress (1)

Estoy creando un sitio web para una compañía de teatro, y estoy creando un índice de todas las producciones pasadas, actuales y futuras. Me gustaría que el índice ''orderby'' la fecha de finalización de cada producción (ACF ''date'' field type; ''ending_date'').

Aquí hay un ejemplo de mi consulta:

<?php $futureProd = array( ''post_type'' => ''productions'', ''posts_per_page'' => -1, ''meta_key'' => ''ending_date'', ''orderby'' => ''meta_value'', ''order'' => ''ASC'', ); $slider_posts = new WP_Query($futureProd); $array_rev = array_reverse($slider_posts->posts); $slider_posts->posts = $array_rev; ?>

También he intentado lo siguiente, agregando las alternativas ''meta_value_date'' así como ''meta_value_num'':

<?php // query posts $futureProd = array( ''post_type'' => ''productions'', ''posts_per_page'' => -1, ''meta_key'' => ''ending_date'', ''orderby'' => ''meta_value_date'', ''order'' => ''ASC'', ); ?>

Y

<?php // query posts $futureProd = array( ''post_type'' => ''productions'', ''posts_per_page'' => -1, ''meta_key'' => ''ending_date'', ''orderby'' => ''meta_value_num'', ''order'' => ''ASC'', ); ?>

No importa lo que intento, las publicaciones se niegan a ordenarlas por meta_valor, y en su lugar optan por ordenarlas por la fecha de publicación predeterminada.

Estoy seguro de que me estoy perdiendo algo simple.

¿Alguien tiene alguna idea?


Puede spicify el tipo de datos en orderby clave como meta_value_* los valores posibles son ''NUMERIC'', ''BINARY'', ''CHAR'', ''DATE'', ''DATETIME'', ''DECIMAL'', ''SIGNED'', ''TIME'', ''UNSIGNED''.

Prueba esto,

$futureProd = array( ''post_type'' => ''productions'', ''posts_per_page'' => -1, ''meta_key'' => ''ending_date'', ''orderby'' => ''meta_value_date'', ''order'' => ''ASC'', ); $slider_posts = new WP_Query($futureProd);

Nota: para que el código anterior funcione, debe tener la fecha en YYYY-MM-DD si tiene una fecha en un formato diferente, entonces debe crear su función de filtro personalizada enganchar en posts_orderby filtrar con la función STR_TO_DATE MySQL.

Para el formato de fecha YYYYMMDD

Agregue esto en su archivo de function.php activo.php de su tema (o tema) hijo activo. O también en cualquier plugin de archivos php.

function text_domain_posts_orderby($orderby, $query) { //Only for custom orderby key if ($query->get(''orderby'') != ''yyyymmdd_date_format'') return $orderby; if (!( $order = $query->get(''order'') )) $order = ''ASC''; global $wpdb; $fieldName = $wpdb->postmeta . ''.meta_value''; return "STR_TO_DATE(" . $fieldName . ", ''%Y%m%d'') " . $order; } add_filter(''posts_orderby'', ''text_domain_posts_orderby'', 10, 2);

Así que ahora su argumento WP_Query debería verse así:

$futureProd = array( ''post_type'' => ''productions'', ''posts_per_page'' => -1, ''meta_key'' => ''ending_date'', ''orderby'' => ''yyyymmdd_date_format'', //added custom orderby key ''order'' => ''ASC'', );

El código está probado y completamente funcional.

Referencia:

Espero que esto ayude.