Обработать один WP_Query с многомерными аргументами для нескольких циклов в Wordpress?Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Обработать один WP_Query с многомерными аргументами для нескольких циклов в Wordpress?

Сообщение Anonymous »

Я хочу оптимизировать свой код ниже. локации и танцевальные стили являются категориями курсов, но идентифицируются константами TownLocation1 и TownLocation2
(те, которые не являются локациями, являются танцевальными стилями и наоборот)

Код: Выделить всё

$locations = get_terms("categorycourses", array('include' => array(townLocation1, townLocation2)));
$dance_styles = get_terms("categorycourses", array('exclude' => array(townLocation1, townLocation2)));

$content = '';

foreach ( $locations as $location ) {
$content .= . ''.$location->name.'';

foreach ( $dance_styles as $dance_style ) {

//Show courses that is associated with this dance-style
//and in this location
$loop = get_loop_courses($dance_style, $location->term_id);

if($loop->have_posts()) {
//show courses here (post with custom post type course)
}

} //end dance_styles
} //end locations

function get_loop_courses($categorycourse, $location_id) {
$terms_slug = strtolower($categorycourse->slug);
$terms_slug = str_replace(' ','', $terms_slug);

$args = array(
'posts_per_page' => -1, //Show ALL coures (no limit)
'post_type' => 'course',
'tax_query' => array(
array(
'taxonomy' => 'categorycourses',
'field' => 'slug',
'terms' => $terms_slug
),
),
);

$args['tax_query'][] =  array(
'taxonomy' => 'categorycourses',
'field' => 'id',
'terms' => array($location_id)
);
}

$loop = new WP_Query($args);
return $loop;
}
get_loop_courses вызывается очень много раз, и поэтому, когда база данных растет, ее загрузка занимает много (ненужного) времени. Мой подход заключался в том, чтобы создать массив аргументов (из функции get_loop_courses), а затем выполнить WP_Query ONCE и зациклить набор результатов управляемым способом. Вот что я пробовал:

Код: Выделить всё

$locations = get_terms("categorycourses", array('include' => array(townLocation1, townLocation2)));
$dance_styles = get_terms("categorycourses", array('exclude' => array(townLocation1, townLocation2)));

$loop_arr = array();
$content = '';

foreach ( $locations as $location ) {
$content .= . ''.$location->name.'';

foreach ( $dance_styles as $dance_style ) {

//Show courses that is associated with this dance-style
//and in this location
$loop_arr[] = get_loop_courses($dance_style, $location->term_id);

} //end dance_styles
} //end locations

$loop = new WP_Query($loop_arr); //this is giving me an array but with a lot of posts, and not the ones I intended

function get_loop_courses($categorycourse, $location_id) {
$terms_slug = strtolower($categorycourse->slug);
$terms_slug = str_replace(' ','', $terms_slug);

$args = array(
'posts_per_page' => -1, //Show ALL coures (no limit)
'post_type' => 'course',
'no_found_rows' => true, //no pagination!
'tax_query' => array(
array(
'taxonomy' => 'categorycourses',
'field' => 'slug',
'terms' => $terms_slug
),
),
);

$args['tax_query'][] =  array(
'taxonomy' => 'categorycourses',
'field' => 'id',
'terms' => array($location_id)
);
}

return $args;
}
Думаю ли я в «правильном» направлении? Пожалуйста, дайте мне подсказки! Возможно, такой подход вообще невозможен?

Можно ли в этом случае использовать переходный процесс?

Подробнее здесь: https://stackoverflow.com/questions/253 ... in-wordpre
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»