Задать вопрос
@Skanex
новичок

Как отфильтровать записи Wordpress внутри рубрики/метки по дате?

Приветствую!
Вопрос для спецов может и пустяковый, но я голову себе сломал уже и обращаюсь за советом. Сразу замечу, что кастомных полей у записей для подходящей фильтрации нет.

Как можно поступить, чтобы фильтровать внутри какой-либо рубрики/метки?

1) Перезаписать даты постов в кастомное поле, допустим, плагина ACF. И попробовать отфильтровать по примерам, которые есть в Сети. Но возможна ли такая перезапись и будет ли она работать при добавлении нового поста?

2) Фильтрация через GET-запрос. Делаю фильтр, пример: мойсайт.ру/2022/05/10/?tag=arbuz Вроде фильтрует, но мы остаёмся по сути внутри метки arbuz с теми же тайтлами, описанием и прочим. Получится дубль. Как сделать запрос, чтобы результат был выведен в архивах по датам? Там уже можно попробовать перезаписать заголовок и описание архива. Или другой метод есть?

3) Расковырять стандартный календарь Вордпресс?

4) Вариант, до которого я не дошёл.

Везде упор на кастомные поля. Но есть ли возможность фильтрации стандартных таксономий в связке рубрика/метка + дата записи?

Заранее благодарен за подсказку!
  • Вопрос задан
  • 450 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Не совсем понятно в какой именно момент вы хотите фильтровать записи

Если у вас дата заполнена в полях ACF и вы хотите сделать запрос из базы исходя из этого параметра, то для этого используется параметр meta_key запроса wp_query()

$posts = get_posts( array(
    'post_type' => 'event',
    'meta_key'  => 'date',
    'orderby'   => 'meta_value_num',
    'order'     => 'ASC',
));


Если вы находитесь в шаблоне archive.php или подобном, то вам надо провести фильтрацию глобального запроса на хуке pre_get_posts

add_action( 'pre_get_posts', 'pre_get_events', 1 );
function pre_get_events( $query ) {
	if ( $query->is_post_type_archive( 'event' ) ) {
		$query->set( 'meta_key', 'date' );
		$query->set( 'orderby', 'meta_value_num' );
	}
}


Если же вам нужно сделать кастомную сортировку по двум и более параметрам, например, с помощью фронтенд формы, то без гет-параметров не обойтись. Возможны любые варианты:

  • мойсайт.ру/2022/05/10/?tag=arbuz
  • мойсайт.ру/tag/arbuz/?date=2022-05-10


С помощью get_query_var() проверяете наличие переменной и меняете основной запрос

add_action( 'pre_get_posts', 'custom_pre_get_posts', 1 );
function custom_pre_get_posts( $query ) {
	if ( $tag = get_query_var( 'tag', false ) ) {
		$query->set( 'tag', $tag );
	}
}


Если вы переживаете, что дублируются заголовки, то можете тем же самым способом с помощью get_query_var() проверять наличие переменной и подменять заголовок с описанием
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы