Ultima postare ordonată după data publicării folosind WP_Query pe prima pagină
Combin mai multe site-uri web într-unul singur și am creat postările corespunzătoare și le-am modificat post_date (data publicării) la momentul original al postării. Cu toate acestea (chiar dacă listez mai mult de o postare), rezultatul pe care îl obțin este ultima postare conform unui recent 'post_modified' (ultima actualizare a postării).
// EDIT - explicație mai detaliată a problemei
Postarea mea originală de pe vechiul site este din, să zicem, 1 ianuarie 2001 (data originală). Apoi, creez o postare pe noul site pe 22 septembrie 2013 (astăzi) și setez manual data publicării în zona de Editare Post la data originală. Pot vedea în $wpdb post_date=2001-01-01
și post_modified=2013-09-22
. Shortcode-ul pentru ultima postare returnează postarea cu cea mai recentă dată post-modified
în loc de cea mai recentă post_date
.
// EDIT - sfârșit
Rulez un WP_Query personalizat într-un slide al unui plugin, folosind un shortcode pentru a-l plasa acolo. Problema este că ia ultima postare modificată în loc de ultima postare publicată.
Codul meu pentru 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 = 'Ne pare rău, nicio postare nu corespunde criteriilor.';
endif;
return $latestpost_output;
}
add_shortcode( 'latestpost', 'latestpost_func' );
Următorii 3 parametri vă vor afișa postările în ordine crescătoare după data publicării (adică cele mai vechi postări vor fi afișate primele)
'post_status' => 'publish', 'orderby' => 'publish_date', 'order' => 'ASC'
Când schimbați order în DESC, veți obține postările în ordine descrescătoare după data publicării (adică cele mai recente postări vor fi afișate primele)
'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));
?>

Conform documentației WP, publish_date
nu este o opțiune disponibilă pentru parametrul orderby
.
https://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters
https://codex.wordpress.org/Class_Reference/WP_Query

Am identificat care era problema. Am un plugin, Custom Post Order, activat pentru a putea sorta postările personalizate (CPTs). Acest plugin suprascria ordinea postărilor. După ce l-am dezactivat pentru postări în setările CPO, totul funcționează acum așa cum trebuie.
