Вопрос или проблема
$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();
Объяснение кода:
-
Дата начала и конца недели: Вы используете функции
strtotime
иdate
для получения даты начала недели (неделя назад) и текущей даты. -
Аргументы для запроса: В массиве
$args
мы задаемmeta_query
, где указываем:'key'
— это кастомное полеlast_view_date
.'value'
— массив, который содержит даты начала и конца последних 7 дней.'compare'
— используемBETWEEN
, чтобы получить записи, просмотренные в этом диапазоне.'type'
— указываем, что сравниваем данные типаDATE
.
-
Запрос и вывод данных: Используя цикл
while
, мы проверяем, имеются ли подходящие записи, и выводим их заголовки и количество просмотров.
Заключение:
Этот код позволит вам извлечь записи, которые были просмотрены за последнюю неделю, независимо от даты их создания. Убедитесь, что вы используете правильные типы данных и соответствующий синтаксис. Не забудьте протестировать запрос на вашем сайте, чтобы убедиться, что всё работает корректно. Если возникнут трудности, посмотрите на наличие данных в вашем кастомном поле.
Если у вас есть дополнительные вопросы или требуется помощь, не стесняйтесь задавать их!