salocin
  • 0
Новичок

Отображать сообщение по таксономии и дочерней таксономии, если они существуют

  • 0

У меня есть зарегистрированная таксономия под названием «Типы», которая иерархична и работает. Примером категорий будет отель в Великобритании —1 звезда —2 звезды —3 звезды Отель в Испании — 1 звезда — 2 звезды — 3 звезды и т. д.

У меня возникли проблемы с поиском правильного способа отображения моих страниц (пользовательская почта отеля).

Мне нужен код для отображения отелей по таксономии, только если они существуют

любая помощь?

ОБНОВИТЬ КОД

<font>
 $taxonomy2 = 'accomodation-type';<font>
 $termsacc = get_terms("accomodation-type",array('orderby' => 'slug', 'order' => 'ASC'));<font>
   foreach ($termsacc as $termaccomodation) {<font>
   //Here I loop through my tax acc-type<font>
   //and check if there is any post by the country $termcountry->name (getting this value higher)<font>
$query = new WP_Query(array('post_type' => 'accomodation', 'orderby'=> $termaccomodation->name,'order' => 'DESC','accomodation-type' =>$termaccomodation->name, 'country' =>$termcountry->name,'posts_per_page' => 48 ));<p></p><font>
<font>
<p>and loop....</p> 

Share
  1. Я бы использовал в этом случае две пользовательские таксономии:

    • страна-отель
    • звезды

    оба неиерархические, тогда ваш запрос будет таким же простым, как, например, отель в Великобритании с 2 звездами:

    $args = array(
        'post_type' => 'hotel',
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'hotel-country',
                'field' => 'slug',
                'terms' => array( 'uk' ),
            ),
            array(
                'taxonomy' => 'stars',
                'field' => 'slug',
                'terms' => array( '3-stars' ),
            )
        )
    );
    $query_posts( $args );
    

    Обновлять:

    Используя существующую настройку, вы можете снова использовать 'tax_query' ее, но теперь вам потребуется идентификатор дочерней таксономии, скажем:

    UK
      3-stars - term_id = 32
    

    тогда ваш запрос и аргументы должны быть:

    $args = array(
        'post_type' => 'hotel',
        'tax_query' => array(
            array(
                'taxonomy' => 'Types',
                'field' => 'id',
                'terms' => array( '32' ),
                'operator' => 'IN',
            )
        )
    );
    $query_posts( $args );
    

    Обновление 2:

    Если вы уже находитесь на странице Великобритании, измените код на этот:

    $taxonomy2 = 'accomodation-type';
    //the current page term id, (UK,JAPAN...)
    $current_term_id = get_query_var('term_id');
    //array of child terms IDs. 
    $termchildren = get_term_children($current_term_id,$taxonomy2); 
    $args = array(
        'post_type' => 'accomodation',
        'tax_query' => array(
            array(
                'taxonomy' => 'accomodation-type',
                'field' => 'id',
                'terms' => $termchildren,
                'operator' => 'IN',
            )
        )
    );
    $query( $args );
    //loop 
    

    это получит все сообщения о размещении, которые имеют дочерний термин типа размещения в Великобритании.

    • 0

Оставить ответ

You must login to add an answer.