Задать вопрос
  • Как сделать фильтры по рубрикам?

    @IceDoG7538 Автор вопроса
    Если кто-то столкнется с подобным прикладываю код решения конкретной проблемы
    function posts_filters(){
        $args =  array(
            'post_type'      => 'news-stocks',
            'category_name'  => '',
            'publish'        => true,
            'orderby'        => 'date',
            'order'          => 'DESC',
        );
       
        if( isset( $_POST['filter'] ) )
            $args = array(
                'post_type'      => 'news-stocks',
                'category_name'  => $_POST['filter'],
                'publish'        => true,
                'orderby'        => 'date',
                'order'          => 'DESC',
            );
       
        $query = new WP_Query( $args );
       
        if( $query->have_posts() ) :
         while( $query->have_posts() ): $query->the_post();
          get_template_part( 'template-parts/template', 'news' );
         endwhile;
        wp_reset_postdata();
        else :
          echo 'Записей не найдено';
        endif;
       
        die();
       }
       add_action('wp_ajax_myfilter', 'posts_filters');
       add_action('wp_ajax_nopriv_myfilter', 'posts_filters');

    <form action="<?php echo admin_url('admin-ajax.php')?>" method="POST" id="filter">
            <input type="radio" id="all" value="" name="filter" checked>   
            <label for="all"></label>
            <span>Все</span>
            <input type="radio" id="stocks" value="stocks" name="filter">
            <label for="stocks"></label>
            <span>Акции</span>
            <input type="radio" id="news" value="news" name="filter">
            <label for="news"></label>
            <span>Новости</span>
            <button>Применить фильтр</button>
            <input type="hidden" name="action" value="myfilter">
        </form>

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