Запрос постов за текущий год

10 мар. 2013 г., 04:59:55
Просмотры: 14.2K
Голосов: 3

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

<?php query_posts( "&year=$current_year&order=DESC"); ?>

Но все равно отображаются посты за 2012 год (они на самом деле не создавались в 2012, но я установил дату публикации для одного из показываемых постов на февраль прошлого года)

Согласно документации, я должен делать именно так. Может кто-нибудь пояснить?

Спасибо

2
Комментарии

Неважно, я забыл задать переменную:

<?php $current_year = date('Y'); ?>

/Facepalm

Phill Phill
10 мар. 2013 г. 05:09:41

Вот информация по теме Когда следует использовать WP_Query, query_posts() или get_posts()? для тех, кто наткнётся на этот вопрос.

admcfajn admcfajn
10 мая 2019 г. 01:25:55
Все ответы на вопрос 2
0

Вам просто нужно получить текущую дату и добавить ее в data_query в wp_query. Посмотрите пример:

<?php 

$getdate = getdate();
$args = array(
    'date_query' => array(
        array(
            'year'  => $getdate["year"]
        ),
    ),
);
$query = new WP_Query( $args );

?>

А затем используйте цикл:

<?php 

if ( $query->have_posts() ): while ( $query->have_posts() ) : $query->the_post();

the_title();
the_content();

endwhile; endif;

?>
11 мая 2014 г. 00:50:52
0

Не используйте query_posts для изменения запросов. Это приводит к нерациональному использованию ресурсов и создает непредсказуемые результаты, так как перезаписывает оригинальный запрос, который выполняется до загрузки шаблона.

Вместо этого используйте pre_get_posts в файле functions.php вашей темы, чтобы изменить запрос до его отправки в базу данных и до загрузки шаблона.

function home_page_current_year( $query ){
    if( $query->is_home() && $query->is_main_query() )
        $query->set( 'year', date('Y') );
}
add_action( 'pre_get_posts', 'home_page_current_year' );
10 мар. 2013 г. 05:15:38