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

    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() проверять наличие переменной и подменять заголовок с описанием
    Ответ написан
    3 комментария