/ Сайтостроение / Плагины / Фильтр по меткам (изменение основного запроса)

Фильтр по меткам (изменение основного запроса)

HIT

29.09.2016

1820

Реализуем фильтрацию записей по меткам путем изменения основного запроса на лету (ajax).

Находим все теги записей входящих в категорию

Данный код можно вставить в боковую колонку в виде виджета.

<?php

$getcat = get_the_category();
if($getcat[0]){
$cat_id=$getcat[0]->term_id;
}
query_posts('cat='.$cat_id.'&posts_per_page=-1'); //брать метки из всей категории или с первой страницы

if(have_posts()): while (have_posts()) : the_post();

$all_tag_objects = get_the_tags();
if($all_tag_objects){
foreach($all_tag_objects as $tag) {
if($tag->count > 0) {$all_tag_ids[] = $tag -> term_id;}
}
}

endwhile;endif; wp_reset_query();
if ( $tag->count > 0 ): ?>

<?php $tag_ids_unique = array_unique($all_tag_ids); ?>

<div id="all" class="activ podcat-line">All</div>

<?php foreach($tag_ids_unique as $tag_id): ?>


<?php
$post_tag = get_term( $tag_id, 'post_tag' );
$imgcat1 = get_field("mini-thumb",$post_tag);
?>

<div class="podcat-line">
<div class="cat-image-min"><img alt="<?php echo $post_tag->name; ?>" src="<?php echo $imgcat1['sizes']['square-xs']; ?>"></div>
<div title="<?php echo $post_tag->term_id; ?>" id="<?php echo $post_tag->slug; ?>" class="taguniq"><?php echo $post_tag->name; ?></div>
</div>

<?php endforeach; ?>

<?php endif; ?>

Находим все теги записей входящих в категорию

Подключаем скрипт и прописываем функцию фильтра

function ajax_filter_posts_scripts() {

wp_register_script( 'afp_script', plugins_url('/ajax-filter-posts.js', __FILE__), array('jquery'), null, false );
wp_enqueue_script( 'afp_script' );

wp_localize_script( 'afp_script', 'afp_vars', array(
'afp_nonce' => wp_create_nonce( 'afp_nonce' ), // Create nonce which we later will use to verify AJAX request
'afp_ajax_url' => admin_url( 'admin-ajax.php' ),
)
);
}
add_action('wp_enqueue_scripts', 'ajax_filter_posts_scripts', 100);

function ajax_filter_get_posts( $taxonomy ) {
$args = array(
'cat' => $_POST['category']
);


if( isset( $_POST['taxonomy'] ) ):
$args['tag__in'] = ($_POST['taxonomy']);
endif;


$theme_post_query = new WP_Query( $args );
$i = 1;
while( $theme_post_query->have_posts() ) :

if ($i === 1) {$new_class = "first-post";}
elseif ($i % 3 == 0) {$new_class = "last-post"; $i = 0;}
else {$new_class = "";}

$theme_post_query->the_post();

include(TEMPLATEPATH."/solus.php");

$i++;
endwhile;

exit;
}

add_action('wp_ajax_filter_posts', 'ajax_filter_get_posts');
add_action('wp_ajax_nopriv_filter_posts', 'ajax_filter_get_posts');

Скрипт

jQuery(document).ready(function($) {
	$('.taguniq').click( function(event) {

		// Prevent defualt action - opening tag page
		if (event.preventDefault) {
			event.preventDefault();
		} else {
			event.returnValue = false;
		}

		// Get tag slug from title attirbute
		var selecetd_taxonomy = $(this).attr('title');
	    var selecetd_cat = $('#curcat').attr('title');

		$('.tagged-posts').fadeOut();

		data = {
			action: 'filter_posts',
			afp_nonce: afp_vars.afp_nonce,
			taxonomy: selecetd_taxonomy,
		    category: selecetd_cat,
		};
	  

		$.ajax({
			type: 'post',
			dataType: 'html',
			url: afp_vars.afp_ajax_url,
			data: data,
			success: function( data, textStatus, XMLHttpRequest ) {
				$('.tagged-posts').html( data );
				$('.tagged-posts').fadeIn();
			    $(".hentry").css("height", "auto");
                $(".hentry").setEqualHeight();
				console.log( textStatus );
				console.log( XMLHttpRequest );
			},
			error: function( MLHttpRequest, textStatus, errorThrown ) {
				console.log( MLHttpRequest );
				console.log( textStatus );
				console.log( errorThrown );
				$('.tagged-posts').html( 'No posts found' );
				$('.tagged-posts').fadeIn();
			}
		})

	});
  
  
  	$('#all').click( function(event) {
	  

		// Получаем данные из различных атрибутов
	    var selecetd_cat = $('#curcat').attr('title');
 

		$('.tagged-posts').fadeOut();

		data = {
			action: 'filter_posts',
			afp_nonce: afp_vars.afp_nonce,
		    category: selecetd_cat,
		};
	  

		$.ajax({
			type: 'post',
			dataType: 'html',
			url: afp_vars.afp_ajax_url,
			data: data,
			success: function( data, textStatus, XMLHttpRequest ) {
				$('.tagged-posts').html( data );
				$('.tagged-posts').fadeIn();
			    $(".hentry").css("height", "auto");
                $(".hentry").setEqualHeight();
				console.log( textStatus );
				console.log( XMLHttpRequest );
			},
			error: function( MLHttpRequest, textStatus, errorThrown ) {
				console.log( MLHttpRequest );
				console.log( textStatus );
				console.log( errorThrown );
				$('.tagged-posts').html( 'No posts found' );
				$('.tagged-posts').fadeIn();
			}
		})
	  
	  
    });
  
});

Тэги: , ,

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Избранное

Избранное

Реализуем функционал Избранное. Нам надо сделать кнопку добавить в Избранное в шаблоне самой записи и в цикле вывода записей категории. И отдельная страница Избранное где выводятся избранные записи. Плагин Favorites Читать далее »

Хуки WordPress

Хуки WordPress

Хуки WordPress — важнейший элемент функционирования ядра WordPress. Хуки (зацепы) действуют следующим образом: система WP содержит множество различных хуков (фильтров и экшенов), которые являются частью структуры ядра и имеют определенную Читать далее »

Список меток текущей категории

Список меток текущей категории

Формируем и выводим список меток текущей категории. Вариант в файл funсtion.php function get_category_tags($cats) { global $wpdb; $tags = $wpdb->get_results (" SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name, t2.count as Читать далее »

/

Добавить комментарий

Пока нет комментариев. Будь первым!

Фильтр по меткам (изменение основного запроса)
Разные шаблоны для разных категорий товаров
Рекомендации для васРазные шаблоны для разных категорий товаровOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.