Последний пост, отсортированный по дате публикации, используя WP_Query на главной странице

22 сент. 2013 г., 05:09:26
Просмотры: 77.8K
Голосов: 6

Я объединяю несколько сайтов в один и создал соответствующие посты, изменив их post_date (дату публикации) на оригинальное время поста. Однако (даже если я вывожу более 1 поста) результат, который я получаю, это последний пост согласно недавнему 'post_modified' (последнему обновлению поста).

// РЕДАКТИРОВАНИЕ - более подробное объяснение проблемы

Мой оригинальный пост на старом сайте, скажем, от 1 января 2001 года (оригинальная дата). Затем я создаю пост на новом сайте 22 сентября 2013 года (сегодня) и вручную устанавливаю дату публикации в области редактирования поста на оригинальную дату. Я вижу в $wpdb post_date=2001-01-01 и post_modified=2013-09-22. Шорткод последнего поста возвращает пост с последней датой post_modified вместо последней post_date.

// РЕДАКТИРОВАНИЕ - конец

Я запускаю пользовательский WP_Query внутри слайда плагина, используя короткий тег для размещения. Проблема в том, что он берет последний измененный пост вместо последнего опубликованного поста.

Мой код для короткого тега:

//[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 = 'Извините, записи не найдены.';
     endif;

  return $latestpost_output;
 }

 add_shortcode( 'latestpost', 'latestpost_func' );
0
Все ответы на вопрос 2
1
16

Следующие 3 параметра позволят вам получить записи в порядке возрастания по дате публикации (т.е. сначала будут показаны более старые записи)

'post_status' => 'publish', 'orderby' => 'publish_date', 'order' => 'ASC'

Если изменить параметр order на DESC, записи будут выводиться в порядке убывания по дате публикации (т.е. сначала будут показаны самые свежие записи)

'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));
?>
3 апр. 2017 г. 16:49:36
Комментарии

Согласно документации WP, параметр publish_date не является допустимым значением для параметра orderby.

https://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters

https://codex.wordpress.org/Class_Reference/WP_Query

crs1138 crs1138
5 апр. 2017 г. 10:36:33
1

Я обнаружил, в чем была проблема. У меня был активен плагин Custom Post Order, который позволяет сортировать мои пользовательские типы записей (CPT). Этот плагин переопределял порядок записей. После отключения его для записей в настройках CPO все стало работать как положено.

22 сент. 2013 г. 20:27:19
Комментарии

Спасибо за напоминание.

crs1138 crs1138
23 окт. 2014 г. 15:45:04