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 иже с ним.

→ Ссылка