Última publicación ordenada por fecha de publicación usando WP_Query en la página principal
Estoy uniendo varios sitios web en uno y he creado las publicaciones correspondientes cambiando su post_date (fecha de publicación) al momento original de la publicación. Sin embargo (incluso si listo más de 1 publicación), el resultado que obtengo es la última publicación según el 'post_modified' bastante reciente (última actualización de la publicación).
// EDICIÓN - explicación más detallada del problema
Mi publicación original en el sitio web antiguo es del, digamos, 1 de enero de 2001 (fecha original). Luego, creo una publicación en el nuevo sitio web el 22 de septiembre de 2013 (hoy) y establezco manualmente la fecha de publicación en el área de Edición de Publicación a la fecha original. Puedo ver en el $wpdb post_date=2001-01-01
y post_modified=2013-09-22
. El shortcode de última publicación devuelve la publicación con la fecha post_modified
más reciente en lugar de la última fecha post_date
.
// EDICIÓN - fin
Estoy ejecutando una WP_Query personalizada dentro de un slide de un plugin, usando un shortcode para colocarlo allí. El problema es que toma la última publicación modificada en lugar de la última publicación publicada.
Mi código para el shortcode:
//[latestpost]
function latestpost_func( $atts ){
global $post;
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query( array( 'paged' => $paged ) );
$latestpost_arg = array(
'post_type' => 'post',
'posts_per_page' => 1,
'orderby' => 'date',
'order' => 'DESC',
'paged' => $paged,
'ignore_sticky_posts' => 1,
'category__in' => array( 127, 253 )
);
$latestpost_query = null;
wp_reset_query();
$latestpost_query = new WP_Query($latestpost_arg);
if ( $latestpost_query -> have_posts() ) :
while ($latestpost_query -> have_posts()) :
$latestpost_query -> the_post();
if (has_post_thumbnail()) {
$large_image_url = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'full');
$latestpost_image_div = '<div class="slide-post-image"><img src="' . $large_image_url[0] . '" /></div>';
}
$latestpost_details_div = '<div class="slide-post-details-div"><h2 class="latest-post-title">' . get_the_title() . '</h2><p class="latest-post-excerpt">' . get_the_excerpt() . '</p></div>';
$latestpost_output = $latestpost_image_div . $latestpost_details_div;
endwhile;
else :
$latestpost_output = 'Lo sentimos, ninguna publicación coincide con tus criterios.';
endif;
return $latestpost_output;
}
add_shortcode( 'latestpost', 'latestpost_func' );
Los siguientes 3 parámetros te darán las publicaciones en orden ascendente según la fecha de publicación (es decir, las publicaciones más antiguas se mostrarán primero)
'post_status' => 'publish', 'orderby' => 'publish_date', 'order' => 'ASC'
Cuando cambias el order a DESC, obtendrás las publicaciones en orden descendente según la fecha de publicación (es decir, las publicaciones más recientes se mostrarán primero)
'post_status' => 'publish', 'orderby' => 'publish_date', 'order' => 'DESC'
<?php
$postsPerPage = 10;
$page = 1;
?>
<?php
$query = new WP_Query(array(
'cat' => 4,
'post_status' => 'publish',
'orderby' => 'publish_date',
'order' => 'ASC',
'paged' => $page,
'posts_per_page' => $postsPerPage));
?>

De acuerdo con la documentación de WP, publish_date
no es una opción disponible para el parámetro orderby
.
https://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters
https://codex.wordpress.org/Class_Reference/WP_Query

He descubierto cuál era el problema. Tengo un plugin, Custom Post Order, activo para poder ordenar mis CPTs. Este plugin estaba sobrescribiendo el orden de las publicaciones. Después de desactivarlo para las publicaciones en los ajustes de CPO, todo funciona como debería.
