salocin
  • 0
Новичок

Отображать сообщение по таксономии и дочерней таксономии

  • 0

Это продолжение Display Post по таксономии и дочерней таксономии, если они существуют.

Мне нужно отобразить список размещения, сначала по типу размещения, затем по регионам. У меня есть пост-тип, называемый accomodation таксономия Country, таксономия accomodation-type, таксономияRegion

Я нахожусь на странице страны, где я получаю значение страны через

$taxonomy = 'country';
$terms=get_the_terms($post->ID,$taxonomy);

if($terms) {
    foreach( $terms as $termcountry ) {

Так что я успешно получаю $termcountry->name; значение текущей страны.

Затем мне нужно выполнить запрос для размещения на основе этой страны, отфильтрованной по типу размещения и по региону в этом типе. Так и должно быть

  • Акк-тип 1
    • Регион1
      • Акко 1
      • Акко 2
      • Акко 3
    • Регион 2
      • Акко 1
      • Акко 2
  • Acc-тип 2
  • так далее….

Я пытаюсь сделать это таким образом

$taxonomy2 = 'accomodation-type';
$termsacc = get_terms("accomodation-type",array('orderby' => 'slug', 'order' => 'ASC'));
       //Loop through Acc-Type
        foreach ($termsacc as $termaccomodation) {
            //Loop through Region in this type
            $taxonomyregion = 'region';
            $termsreg = get_terms("region",array('orderby' => 'slug', 'order' => 'ASC'));
             foreach ($termsreg as $termregion) {
            $args = array(
                'post_type' => 'accomodation',
                'country' => $termcountry->name,
                'tax_query' => array(
                    'relation' => 'AND',
                    array(
                        'taxonomy' => 'accomodation-type',
                        'field' => 'slug',
                        'terms' => array($termaccomodation->name),
                    ),
                    array(
                        'taxonomy' => 'region',
                        'field' => 'slug',
                        'terms' => array($termregion->name),
                    )
                )
            );


            $query = new WP_Query($arg); 
             //Do the loop

но это не делает этого…. Почесал голову над этим и буду признателен за некоторую помощь / решение, спасибо заранее

Share
  1. Вы должны запросить все accomodation сообщения в этом country, а затем отсортировать их по accomodation-type и region . Затем вы перебираете посты и сравниваете тип размещения и регион каждого поста с предыдущим постом. Если они отличаются, вы печатаете новый тип размещения или регион, а затем печатаете пост.

    // Pseudo-code to explain the idea
    $prev_post_accomodation_type = $accomodations[0]->accomodation_type;
    $prev_post_region = $accomodations[0]->region;
    echo '<ul>';
    echo '<li>' . $prev_post_accomodation_type . '<ul>';
    echo '<li>' . $prev_post_region . '<ul>';
    foreach ( $accomodations as $accomodation ) {
        $cur_post_accomodation_type = $accomodation->accomodation_type;
        $cur_post_region = $accomodation->region;
        if ( $prev_post_accomodation_type != $cur_post_accomodation_type ) {
            echo '</ul></li>'; // Close previous region list
            echo '</ul></li>'; // Close previous accomodation type list
            echo '<li>' . $cur_post_accomodation_type . '<ul>';
            echo '<li>' . $cur_post_region . '<ul>';
        } elseif ( $prev_post_region != $cur_post_region ) {
            echo '</ul></li>'; // Close previous region list
            echo '<li>' . $cur_post_region . '<ul>';
        }
        echo '<li>' . $accomodation->post_title . '</li>';
    }
    echo '</ul></li>'; // Close previous region list
    echo '</ul></li>'; // Close previous accomodation type list
    echo '</ul>';
    

    Вы можете сделать эту сортировку в базе данных или в PHP. В PHP может быть проще, но потребуется много дополнительных запросов к базе данных, потому что вы делаете это get_post_terms() для каждого сообщения. В базе данных быстрее, но потребует некоторой фильтрации SQL-запроса, который будет выполнять WordPress.

    Мой корректор орфографии хочет заменить accomodation на accommodation, не слишком ли поздно изменить это и в вашем коде?

    • 0

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

You must login to add an answer.