15
Вывод постов только из текущей категории
В новых версиях wordpress для вывода списка постов только из текущей категории, без дочерних, можно использовать следующий код:
add_filter('posts_where', 'in_cat_only'); function in_cat_only($where) { global $wp_query; if ($cat = intval($wp_query->query_vars['cat'])) { $where = preg_replace('/term_taxonomy_id IN \(.*?\)/',"term_taxonomy_id IN ($cat)",$where); } return $where; }
UPD Сергей Бирюков на одном из форумов предложил следующее решение (исправлено)
function no_children( $query ) { if ( ! is_admin() && $query->is_main_query() && $query->is_category() ) $query->set( 'category__in', array( get_queried_object_id() ) ); } add_action( 'pre_get_posts', 'no_children' );
UPD Та же фишка теперь и в виде плагина.
Не сработало
Проверил код Сергея в WP 5.5. Работает.
Добрый день.
А как можно после исключение постов из дочерних рубрик, вывести эти самые рубрики? (Хотя бы списком, но лучше так как задает тема вывод списка постов.
Спасибо
Можно. Но это настолько «после», что к плагину, точнее к тому, что и где он делает, имеет очень опосредованное отношение. Плагин меняет условия выборки постов при инициализации движка — начало процесса формирования страницы, а Вам нужен вывод в шаблоне категории — самый конец формирования.
Смотрите в сторону правки шаблона category.php и функции wp_list_categories().
Codex поможет.
Если просто использовать ваше решение, то если в рубрике отсутствуют посты, то пишется «ничего не найдено» хотя есть посты в подрубриках.
Как можно решить эту проблему?
Когда-то давно, во времена WP2, я делал вот так:
add_action('template_redirect', 'no_404_cat');
function no_404_cat() {
global $cat;
if ( !$cat or !is_404()) return;
header('HTTP/1.1 200 OK');
include(TEMPLATEPATH . "/category.php");
exit;
}
Ну и раз уж я добрался до того сайта, то заодно притащу сюда код из category.php, выводящий деток текущей рубрики, если они есть
<?php
echo category_description();
if (count(get_categories('child_of='.$cat))): ?>
<b>Разделы:</b><ul>
<?php wp_list_categories('title_li=&orderby=order&optioncount=0&use_desc_for_title=0&child_of='.$cat); ?>
</ul>
<?php endif; ?>
Спасибо! Как раз это я и искал!!! Выручили!
Просто огромное СПАСИБИЩЕ!!! 3 часа искал решение проблемы пока не наткнулся на ваш блог!
Спасибо, Сергей! Я отредактировал код в посте.
Исправленный фрагмент (действует только на основной цикл записей): http://forum.maxsite.org/viewtopic.php?pid=62225#p62225
Полезный хак! )
Не судьба, видать. Попробуйте другие решения.
Написал плагин из вашего кода. После активации исчезли все посты во всех категориях — выдаёт ошибку: Sorry, but there aren’t any posts in the category yet.
В functions.php активной Темы или сделать плагин.
подскажите, пожалуйста, чайнику — куда код ентот вставить?