Query Posts by taxonomy / Taxonomy Child На заказ

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

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

-Отель 1Star
–Marseille
— Отель 1
— Отель 2
–Париж
— Отель 1
— Отель 2

-Отель 2Star
и т.д .. и т.д …

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

Список жилых помещений «живет» на страновой странице, поэтому ценность страны уже известна. (например, $ termcountry-> name)

Мой код ниже:

$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();?> 

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

приветствия

Solutions Collecting From Web of "Query Posts by taxonomy / Taxonomy Child На заказ"

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

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

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

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