Задать вопрос
@veroni1337

Почему у меня не работает ajax фильтр по таксономиям wordpress?

Здравствуйте. Помогите сделать фильтр пожалуйста. Делаю по примерам из интернета) Не понимаю, что я делаю не так
вывод фильтра на фронтенде. Этот код я вставляю в файл portfolio.php, это файл шаблона в корне темы.
<?php
                                    $projectsCat = get_terms([
                                        'taxonomy' => 'projectscat',
                                        'orderby'  => 'name',
                                    ]);

                                    foreach ($projectsCat as $projectsCatData => $projectsCatItem) :
                                ?>
                                    <div class="portfolio_filter_item">
                                        <div class="filter_category_parent">
                                            <input type="checkbox" id="<?php echo $projectsCatItem->term_id; ?>" name="<?php echo $projectsCatItem->term_id; ?>" class="portfolio_filter_input">
                                            <label for="<?php echo $projectsCatItem->term_id; ?>" class="portfolio_filter_label">    
                                            </label>
                                            <span class="menu portfolio_filter_dropdown">
                                                <?php echo $projectsCatItem->name; ?>
                                                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                                                    <path fill-rule="evenodd" clip-rule="evenodd" d="M11.6465 15.3536L5.64648 9.35359L6.35359 8.64648L12 14.2929L17.6465 8.64648L18.3536 9.35359L12.3536 15.3536C12.1583 15.5489 11.8417 15.5489 11.6465 15.3536Z" fill="#2E1C17"/>
                                                </svg> 
                                            </span>
                                        </div>
                                    </div>
                                <?php endforeach; ?>


в этом же файле вывожу записи которая ссылается на шаблон в template-parts/template-portfolio.php
<?php
                    global $wp_query;

                    $wp_query = new WP_Query(array(
                        'post_type'      => 'projects',
                        'posts_per_page' => 9,
                        'paged' => get_query_var('paged') ?: 1,
                        'category_name' => ''
                    ));

                    $counter = 1;

                    // Цикл.
                    if ( $wp_query->have_posts() ) :
                        echo '<div class="portfolio_cards active">';
                        while ( $wp_query->have_posts() ) :
                            $wp_query->the_post();
                            get_template_part( 'template-parts/template', 'portfolio' );
                    ?>

                        

                        <?php
                        if ( is_int( $counter / 3 ) ) {
                            echo '</div>';
                            echo '<div class="portfolio_cards active">';
                        }
                        $counter++;
                        endwhile;
                        ?>



                    <?php echo '</div>'; else : ?>

                    <?php endif; ?>


js код:
jQuery( function( $ ){
$('#filter').change(function(){
    var filter = $('#filter');
    $.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( 'Применить фильтр' ); // возвращаеи текст кнопки
            $('.loop-archive-workshop').html(data);
        }
    });
    return false;
});
});


php код для ajax фильтра в functions.php:
function mysite_filter_function(){

	//groups checkboxes
	if( $groups = get_terms( array( 'taxonomy' => 'projectscat' ) ) ) :
	$groups_terms = array();
	
	foreach( $groups as $group ) {
		if( isset( $_POST['group_' . $group->term_id ] ) && $_POST['group_' . $group->term_id] == 'on' )
			 $groups_terms[] = $group->slug;
	}
	endif;

	$tax_query = array( 'relation' => 'AND' );

	if ( ! empty( $groups_terms ) ) {
		$tax_query[] = array(
			'taxonomy' => 'projectscat',
			'field'    => 'slug',
			'terms'    => $groups_terms,
		);
	}

	$args = array(
		'orderby'        => 'date',
		'post_type'      => 'workshop',
		'posts_per_page' => -1,
		'tax_query'      => $tax_query,
	);
	
	
	$query = new WP_Query( $args );
	
	if( $query->have_posts() ) :
		while( $query->have_posts() ): $query->the_post();
			get_template_part( 'template-parts/template', 'portfolio' );
		endwhile;
		wp_reset_postdata();
	else :
		echo 'No posts found';
	endif;
	
	die();
	}
	add_action('wp_ajax_myfilter', 'mysite_filter_function');
	add_action('wp_ajax_nopriv_myfilter', 'mysite_filter_function');
  • Вопрос задан
  • 119 просмотров
Подписаться 3 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы