salocin
  • 0
Новичок

Запрос сообщений по таксономии/дочерней таксономии Пользовательский порядок

  • 0

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

Так, например, список ВСЕХ вариантов размещения во ФРАНЦИИ, по рейтингу отеля (1,2,3,4,5), а затем по региону (Париж, Марсель и т. д.).

-Отель

1Star —Марсель

—Отель 1

—Отель 2 —

Париж

—Отель 1

—Отель 2

-Отель 2Star и

т.д.. и т.д…

Каждая запись в отеле представляет собой пользовательский пост под названием «Размещение». У меня есть 3 таксономии, страны (например, Франция), тип размещения (например, отель 1 звезда), регион (например, Париж).

Перечень жилья «живет» на странице страны, поэтому значение страны уже известно. (т.е. $termcountry->имя)

Мой код ниже:

            $taxonomy2 = 'accomodation-type';
        $termsacc = get_terms("accomodation-type",array('orderby' => 'slug', 'order' => 'ASC'));

        foreach ($termsacc as $termaccomodation) {
            $taxonomyregion = 'region';
            $termsreg = get_terms("region",array('orderby' => 'slug', 'order' => 'ASC'));
             foreach ($termsreg as $termregion) {

             $query = array(
              'post_type' => 'accomodation',
              'accomodation-type' =>$termaccomodation->name,
              'country' =>$termcountry->name, 
              'orderby' => 'title', 
              'order' => 'ASC',
              'posts_per_page' => 48,                 
              'tax_query' => array(
              array(
                    'taxonomy' => $taxonomyregion,
                    'field' => 'slug',
                    'terms' => $termregion->name,
                    'orderby' => 'title', 
                    'order' => 'ASC',
                    )
                  )

              );

            query_posts($query);

             $count = 1; //First we set the count to be zeo    
             if(have_posts() ) {  
             $termaccomodation->slug = str_replace("%e2%80%98", "", $termaccomodation->slug);
             $termaccomodation->slug = str_replace("%e2%80%99", "", $termaccomodation->slug);

             if($termregion->name=="General"){
              $regionname = "";
             }else{
              $regionname = " - ".$termregion->name;
             }
             $id = '';
             $new_id = ++ $id;
             ?> 
             <a name="<?php echo   $new_id."-".$termaccomodation->slug."-".$termregion->slug;?>"></a>
             <div id="accitem">
                <?php echo "<h3>".$termaccomodation->name."".$regionname."</h3>";?>

             <?
             while (have_posts()) : the_post();
             $linkacc = get_custom_field("AccomodationLink");
             ?>
             I do my loop stuff and display the accom list.
             then close my loop
             <?php endwhile; wp_reset_query();?>

Это работает, но ОЧЕНЬ МЕДЛЕННО… и я почти уверен, что это не оптимальный/лучший способ сделать это. Могу я пораскинуть мозгами по этому поводу? Помощь!

ура с

Share
  1. Просто отвечаю здесь понемногу и добавлю любые оптимизации, которые я вижу по мере продвижения:

    1) $termsreg = get_terms("region",array('orderby' => 'slug', 'order' => 'ASC')); можно запустить над циклом foreach. Нет необходимости запускать это сколько угодно раз.

    2) Все ли ваши отели, которые вы указали в пользовательском типе сообщений, перечислены где-нибудь на этой странице? Если во время этого двойного цикла все ваши отели будут показаны хотя бы один раз, то было бы лучше сначала загрузить все ваши отели в массив вместе с налогами, которым они принадлежат. затем в foreach проверьте данные, которые вы уже получили, а затем покажите отель, а не каждый раз захватывайте его из БД. Что бы я сделал, чтобы получить данные об отелях, в первую очередь, это пользовательский SQL-запрос, чтобы убедиться, что я вытащил только те данные, которые мне нужны, и вытащил оба связанных налога.

    Это все, что я придумал на данный момент.

    • 0

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

You must login to add an answer.