WordPress – Запрос записей за прошлую неделю и по пользовательскому полю

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

$today = date("Y-m-d");
$args= array(
    'meta_key' => 'post_views_count',
  'meta_query' => array(
    'key' => 'last_view_date',
    'type' => 'DATE',
    'value' => $today,
    'compare' => '>'            
  )
);
$my_query = new WP_Query($args);

Каждый раз, когда я просматриваю пост, настраиваемое поле last_view_date обновляется, поэтому я хотел бы отображать посты, просмотренные на этой неделе.

Когда я использую date_query, он показывает только посты, созданные на прошлой неделе, но я хочу отображать посты по last_view_time, даже если пост был создан год назад.

Это возможно? Большое спасибо за ваши ответы.

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

Чтобы получить записи в WordPress, просмотренные за последнюю неделю с учетом кастомного поля, можно воспользоваться параметрами meta_query. Ваша цель — выбрать записи на основе поля last_view_date, которое обновляется при каждом просмотре поста, без учета их даты создания.

Для решения этой задачи вы можете использовать следующий код:

// Определяем текущую дату и дату начала недели
$today = date("Y-m-d");
$last_week_start = date("Y-m-d", strtotime('-1 week'));

// Подготавливаем аргументы для WP_Query
$args = array(
    'meta_key' => 'post_views_count', // Указываем мета-ключ
    'meta_query' => array(
        array(
            'key' => 'last_view_date', // Ключ нашего кастомного поля
            'value' => array($last_week_start, $today), // Указываем диапазон дат за последнюю неделю
            'compare' => 'BETWEEN', // Используем оператор BETWEEN для выбора записей между двумя датами
            'type' => 'DATE' // Указываем тип данных
        )
    ),
    'posts_per_page' => -1 // Указываем количество выводимых записей
);

// Выполняем запрос
$my_query = new WP_Query($args);

// Проверяем наличие записей
if ($my_query->have_posts()) {
    while ($my_query->have_posts()) {
        $my_query->the_post();
        // Выводим заголовок поста
        the_title('<h2>', '</h2>');
        // Выводим количество просмотров
        echo '<p>Просмотров: ' . get_post_meta(get_the_ID(), 'post_views_count', true) . '</p>';
        // Добавьте любые другие элементы, которые необходимо вывести
    }
} else {
    echo 'Нет записей, просмотренных за последнюю неделю.';
}

// Сбрасываем пост данные
wp_reset_postdata();

Объяснение кода:

  1. Дата начала и конца недели: Вы используете функции strtotime и date для получения даты начала недели (неделя назад) и текущей даты.

  2. Аргументы для запроса: В массиве $args мы задаем meta_query, где указываем:

    • 'key' — это кастомное поле last_view_date.
    • 'value' — массив, который содержит даты начала и конца последних 7 дней.
    • 'compare' — используем BETWEEN, чтобы получить записи, просмотренные в этом диапазоне.
    • 'type' — указываем, что сравниваем данные типа DATE.
  3. Запрос и вывод данных: Используя цикл while, мы проверяем, имеются ли подходящие записи, и выводим их заголовки и количество просмотров.

Заключение:

Этот код позволит вам извлечь записи, которые были просмотрены за последнюю неделю, независимо от даты их создания. Убедитесь, что вы используете правильные типы данных и соответствующий синтаксис. Не забудьте протестировать запрос на вашем сайте, чтобы убедиться, что всё работает корректно. Если возникнут трудности, посмотрите на наличие данных в вашем кастомном поле.

Если у вас есть дополнительные вопросы или требуется помощь, не стесняйтесь задавать их!

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

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