Фильтр вывода записей в WordPress

176
22 декабря 2019, 05:40

Сделал AJAX фильтр записей WordPress. Для простоты включил в него только чекбокс, который включает сортировку записей по порядку (ASC).

Вот функция-обработчик в functions.php, которая делает вывод записей через функцию get_posts():

function true_filter_function(){
$args = array(
    'post_type'   => 'pizza',
    'order'       => 'DESC',
);
// условие: включено ASC - сортировка по порядку
if ( isset( $_POST['in_order'] ) && $_POST['in_order'] == 'on' ) {
    $args['order'] = 'ASC';
}
echo "<pre>";
print_r( $args  );
echo "</pre>";
$pizza = get_posts( $args );
return $pizza; }
add_action('wp_ajax_myfilter', 'true_filter_function');
add_action('wp_ajax_nopriv_myfilter', 'true_filter_function');

Это фильтр и вывод постов на странице:

            <!-- Фильтр -->
            <form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="filter">
                <label><input type="checkbox" name="in_order"/>Включить сортировку по порядку</label>
                <button>Применить фильтр</button>
                <input type="hidden" name="action" value="myfilter">
            </form>
            <div id="response"></div>
            <!-- Вывод постов -->
            <?php
                $pizza = true_filter_function();
                foreach ($pizza as $post) : setup_postdata($post); ?>
                <div class="post__item">
                    <h1><?php the_title(); ?></h1>
                    <?php the_post_thumbnail('thumbnail'); ?>
                </div>
            <?php endforeach; wp_reset_postdata(); ?>

jQuery-скрипт:

jQuery(function($){
$('#filter').submit(function(){
    var filter = $(this);
    $.ajax({
        url:filter.attr('action'), // обработчик
        data:filter.serialize(), // данные
        type:filter.attr('method'), // тип запроса
        beforeSend:function(xhr){
            filter.find('button').text('Загружаю...'); // изменяем текст кнопки
        },
        success:function(data){
            filter.find('button').text('Применить фильтр'); // возвращаем текст кнопки
            $('#response').html(data);
        }
    });
    return false;
});

});

В functions.php сделал print_r( $args );. При включении чекбокса "Включить сортировку по порядку" и нажатии на кнопку "Применить фильтр" видно, что в массиве $args меняется значение ключа 'order' с 'DESC' на 'ASC':

но на порядок вывода записей это почему-то никак не влияет.

Подскажите, что я делаю не так?

Answer 1
$args = array(
'post_type'   => 'pizza',
'orderby'     => 'ID', // <= Сортировать по убыванию чего
'order'       => 'ASC',
);
READ ALSO
Делегаты и их использование на манер событий

Делегаты и их использование на манер событий

Копаясь в книге Троэлсена по-поводу делегатов заметил такую забавную штуку что делегаты могут использоваться на манер событий и собсвтенно...

167