Как ускорить WP_Query при получении записи годичной давности?

Вопрос или проблема

Я пытаюсь получить один пост с сегодняшней даты год назад, и код ниже оказывается медленным запросом в Query Monitor. Как более эффективно выполнить запрос на получение поста с даты год назад?

<?php $args = array(
    'date_query' => array(
        'post_parent' => '',
        'post_status' => 'publish',
        'orderby' => 'date',
        'order' => 'DESC',
        'post_type' => 'post',
        'column' => 'post_date',
        'before' => '1 year ago',
        ),
    'posts_per_page' => 1,
);
$query = new WP_Query( $args ); ?>

    <?php while($query->have_posts()) : $query->the_post(); ?>

        <a href="<?php the_permalink() ?>">

        <?php the_title(); ?></a>

    <?php endwhile; wp_reset_postdata();?>

Ответ или решение

Чтобы ускорить выполнение WP_Query при извлечении поста за аналогичный день прошлого года, важно оптимизировать запрос. Давайте рассмотрим возможные пути решения этой задачи с точки зрения производительности и эффективности:

Анализ текущего подхода:

  1. Использование date_query: Ваш текущий код применяет date_query с параметром before, что может приводить к неэффективной работе, поскольку он проверяет множество записей.

  2. Сортировка и огранчиение: Сортировка и ограничение числом записей (orderby, order, posts_per_page). Однако, они накладываются уже после выполнения основного поиска, и это может замедлять процесс.

Оптимизация запроса:

  1. Явная дата вместо "1 year ago": Вместо использования человеческой интерпретации времени, такой как 'before' => '1 year ago', лучше задать точную дату, чтобы избежать лишних вычислений. Например:

    $one_year_ago_date = date('Y-m-d', strtotime('-1 year'));
  2. Использование поля date_query более целенаправленно: Указываем точные границы запроса для ускорения выборки:

    $args = array(
        'date_query' => array(
            array(
                'year'  => date('Y', strtotime($one_year_ago_date)),
                'month' => date('m', strtotime($one_year_ago_date)),
                'day'  => date('d', strtotime($one_year_ago_date)),
            ),
        ),
        'posts_per_page' => 1,
        'post_type' => 'post',
        'post_status' => 'publish',
    );
  3. Кэширование результатов: Используйте плагины или WP Transients API для временного хранения результата запроса, чтобы избежать повторных вычислений при аналогичных запросах.

  4. Проверка индексов БД: Убедитесь, что столбцы базы данных, такие как post_date, индексированы для более быстрого выполнения запросов.

  5. Использование объектов wpdb для более сложных сценариев: Если нужно более сложное условие выборки или возникли проблемы с производительностью, можно рассмотреть переход к нативным SQL-запросам с использованием объекта wpdb.

Общий вывод:

Применив данные методы, вы сможете значительно снизить время выполнения WP_Query для поиска поста с аналогичной датой прошлого года. Важно исходить из предпосылки, что чем точнее и определеннее запрос на уровне SQL, тем быстрее и эффективнее будет обработка данных.


Избегайте использования общих выражений и старайтесь адаптировать ваш код под конкретные нужды и возможные особенности работы вашего сайта.

Оцените материал
Добавить комментарий

Капча загружается...