Wordpress шпаргалки

Исключаем из сайдабара посты основной ленты и фильтруем по категории

Как исключить из сайдбара посты основной ленты wordpress и сделать ее фильтрацию по категории записи?

1. Вставляем в function.php темы следующую функцию:

function filtruems(){
 global $wp_query;
 $posts = $wp_query->posts;
 $category = $wp_query->query_vars['cat']; //Берем категорию - параметр заполняется в категории
 
 for($i=0; $i<count($posts); $i++){
 $posts_id[] = $posts[$i]->ID; //Собираем айди из основного массива
 }
 if(!isset($category) || empty($category)) 
 $category = '';
 if(is_single()){ //Если это сингл, то категорию берем не из глобального массива
 $category = get_the_category($posts[0]->ID);
 $category = $category[0]->term_id;
 }
 
 if($wp_query->found_posts <= $wp_query->query_vars['posts_per_page'])
 query_posts(array('category__in'=>$category, 'posts_per_page'=>5));
else
 query_posts(array('post__not_in'=>$posts_id, 'category__in'=>$category, 'posts_per_page'=>5));
}

 

2. Далее в месте где нужно фильтровать добавляем filtruems(), к примеру:

 

<?php filtruems(); 
 if(have_posts()): ?>
 <?php while(have_posts()): the_post();?>
 <li class="clear wrapper">
 <div class="aside_news_img left">
 <img src="<?php echo kama_thumb_src('w=61&h=45'); ?>" alt="<?php the_title(); ?>">
 </div>
 <div class="aside_news_content">
 <div class="aside_news_title break"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
 <div class="cat_data"></div>
 <div class="aside_news_text break">
 
 </div>
 </div> 
 </li>
 
 <?php endwhile; wp_reset_query(); endif; ?>

— НЕ ЗАБЫВАЙТЕ wp_reset_query(), т.к. функция filtruems() использует query_posts().

Если что-то не так, значит $wp_query где-то отфильтрован и не было сброса — wp_reset_query();

Об авторе

Виталий Мельничук

Адаптивная верстка HTML5+CSS3. Разработка шаблонов под CMS Wordpress, DLE. Делаю работу качественно и в срок.

Оставить комментарий

facebook