WP Как сделать сортировку постов по слагу дочерних таксономий?
Столкнулся с такой проблемой, что не получается отсортировать карточки элементов, по слагу таксономий. В документации про это не пишут.
У меня есть вот такой вызов.
function filtered_content() {
check_ajax_referer('loadmore_nonce', 'nonce');
$paged = isset($_POST['page']) ? (int)$_POST['page'] : 1;
$per_page = isset($_POST['perpage']) ? (int)$_POST['perpage'] : 10;
$search_query = isset($_POST['s']) ? sanitize_text_field($_POST['s']) : '';
$sort_by = isset($_POST['sort_by']) ? sanitize_text_field($_POST['sort_by']) : 'featured'; // Default sort
$location = isset($_POST['location']) ? $_POST['location'] : array(); // Expecting array
$property_type = isset($_POST['property_type']) ? $_POST['property_type'] : array(); // Expecting array
$args = array(
'post_type' => 'property',
'posts_per_page' => $per_page,
'paged' => $paged,
's' => $search_query,
);
if ($sort_by === 'location') {
// Получение всех дочерних терминов
$terms = get_terms(array(
'taxonomy' => 'location',
'hide_empty' => true,
'orderby' => 'slug',
'order' => 'ASC',
'fields' => 'all',
));
$child_terms = array();
foreach ($terms as $term) {
if ($term->parent != 0) {
$child_terms[] = $term->slug;
}
}
error_log(print_r($child_terms, true));
if (!empty($child_terms)) {
// Получаем ID постов, связанных с дочерними терминами
$posts_in = get_posts(array(
'post_type' => 'property',
'numberposts'=> -1, // Без ограничений
'fields' => 'ids',
'tax_query' => array(
array(
'taxonomy' => 'location',
'field' => 'slug',
'terms' => $child_terms,
'operator' => 'IN'
)
)
));
// Если посты найдены, сортируем по post__in
if (!empty($posts_in)) {
$args['post__in'] = $posts_in;
$args['orderby'] = 'post__in';
}
}
} else {
$args['orderby'] = 'date';
$args['order'] = 'DESC';
}
error_log(print_r($args, true));
// Handle tax queries
$tax_queries = array();
if (!empty($location)) {
$tax_queries[] = array(
'taxonomy' => 'location',
'field' => 'slug',
'terms' => $location,
);
}
if (!empty($property_type)) {
$tax_queries[] = array(
'taxonomy' => 'property_type',
'field' => 'slug',
'terms' => $property_type,
);
}
if (!empty($tax_queries)) {
$args['tax_query'] = $tax_queries;
}
$query = new WP_Query($args);
if ($query->have_posts()) {
ob_start();
while ($query->have_posts()) {
$query->the_post();
get_template_part('template-parts/parts/item', 'property');
}
$content = ob_get_clean();
$response = array(
'success' => true,
'data' => array(
'content' => $content,
'hasMore' => $query->max_num_pages > $paged,
),
);
} else {
$response = array(
'success' => false,
'data' => array(
'content' => '<p class="card-text_empty">We do not have an offer matching your criteria</p>',
'hasMore' => false,
),
);
}
wp_reset_postdata();
wp_send_json($response);
}
add_action('wp_ajax_filtered_properties', 'filtered_content');
add_action('wp_ajax_nopriv_filtered_properties', 'filtered_content');
Сортировка самих слагов таксономий происходит хорошо, error_log(print_r($child_terms, true)); Но вот как теперь забрать те посты ?
Array
(
[0] => arizona
[1] => dartmouth
[2] => daytona-beach
[3] => florida
[4] => georgia
[5] => las-vegas
[6] => nevada
[7] => nova-scotia
[8] => ontario
[9] => palm-beach-gardens
[10] => quebec
[11] => toronto
[12] => wisconsin
)
А как теперь вивести посты у которых 'post_type'=>'property'
в соответствии с данными слагами ?
Ответы (1 шт):
Автор решения: SeVlad
→ Ссылка
не получается отсортировать карточки элементов,
Потому что "карточки элементов" (посты) выбираются и сортируются не get_terms()
, а wp_query иже с ним.