Здравствуйте уважаемые, опишу все поэтапно:
Общая информация. Стоит передо мной следующая задача, есть категория на сайте (ее id – 6), в которой примерно один раз на месяц будет создаваться подкатегория. Внешний вид всех подкатегорий данной категории одинаковый, но отличается от вида других категорий сайта. По началу, когда не планировалось создание многих подкатегорий проблем не было, создал файл шаблона категории – category-6.php и все работает. Теперь же, если идти таким способом, то для каждой новой подкатегории необходимо создавать файл шаблона category-ID.php, данный метод не универсален.
Решение. В сети нашел функцию, которая проверяет принадлежность поста к конкретной категории или любой вложенной в эту категорию под-категории, вот ее код, который добавил в functions.php:
Код |
---|
function post_is_in_descendant_category( $cats, $_post = null ) { foreach ( (array) $cats as $cat ) { // get_term_children() accepts integer ID only $descendants = get_term_children( (int) $cat, 'category'); if ( $descendants && in_category( $descendants, $_post ) ) return true; } return false; }
|
Первичный код файла category.php:
Код |
---|
<?php
/**
* The template for displaying Category Archive pages.
*
* @since admired 1.0
*/
get_header(); ?>
<section id="primary">
<div id="content" role="main">
<?php if ( have_posts() ) : ?>
<header class="page-header">
<h1 class="page-title"><?php
printf( __( 'Розділ: %s', 'admired' ), '<span>' . single_cat_title( '', false ) . '</span>' );
?></h1>
<?php
$category_description = category_description();
if ( ! empty( $category_description ) )
echo apply_filters( 'category_archive_meta', '<div class="category-archive-meta">' . $category_description . '</div>' );
?>
</header>
<?php admired_content_nav( 'nav-above' ); ?>
<?php /* Start the Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php
/* Include the Post-Format-specific template for the content.
-----------------------------------------------------------*/
get_template_part( 'loop', get_post_format() );
?>
<?php endwhile; ?>
<?php admired_pagination(); ?>
<?php else : ?>
<article id="post-0" class="post no-results not-found">
<header class="entry-header">
<h1 class="entry-title"><?php _e( 'Публікацій не знайдено', 'admired' ); ?></h1>
</header><!-- .entry-header -->
<div class="entry-content">
<p><?php _e( 'Вибачте, але в даному розділі не знайдено жодної публікації. Можливо пошук допоможе знайти потрібні публікації.', 'admired' ); ?></p>
<?php get_search_form(); ?>
</div><!-- .entry-content -->
</article><!-- #post-0 -->
<?php endif; ?>
</div><!-- #content -->
</section><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?> |
Модифицированный код файла category.php с выше указанной проверкой:
Код |
---|
<?php
/**
* The template for displaying Category Archive pages.
*
* @since admired 1.0
*/
?>
<?php if ( in_category( 6 ) || post_is_in_descendant_category( 6 ) ) : ?>
<?php get_template_part('category', 6); ?>
<?php esle : ?>
<?php get_header(); ?>
<section id="primary">
<div id="content" role="main">
<?php if ( have_posts() ) : ?>
<header class="page-header">
<h1 class="page-title"><?php
printf( __( 'Розділ: %s', 'admired' ), '<span>' . single_cat_title( '', false ) . '</span>' );
?></h1>
<?php
$category_description = category_description();
if ( ! empty( $category_description ) )
echo apply_filters( 'category_archive_meta', '<div class="category-archive-meta">' . $category_description . '</div>' );
?>
</header>
<?php admired_content_nav( 'nav-above' ); ?>
<?php /* Start the Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php
/* Include the Post-Format-specific template for the content.
-----------------------------------------------------------*/
get_template_part( 'loop', get_post_format() );
?>
<?php endwhile; ?>
<?php admired_pagination(); ?>
<?php else : ?>
<article id="post-0" class="post no-results not-found">
<header class="entry-header">
<h1 class="entry-title"><?php _e( 'Публікацій не знайдено', 'admired' ); ?></h1>
</header><!-- .entry-header -->
<div class="entry-content">
<p><?php _e( 'Вибачте, але в даному розділі не знайдено жодної публікації. Можливо пошук допоможе знайти потрібні публікації.', 'admired' ); ?></p>
<?php get_search_form(); ?>
</div><!-- .entry-content -->
</article><!-- #post-0 -->
<?php endif; ?>
</div><!-- #content -->
</section><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
<?php endif; ?> |
Проблема. Категория с id – 6 отображается нормально, ее подкатегории тоже, на всех остальных категориях – белый фон. Режим отладки ничего толкового не говорит, он сообщает об ошибке в файле wp-includes/ functions.php. Как я понимаю, ошибку допускаю я, на этапе проверки принадлежность поста к конкретной категории. Вчера пол дня с этим возился и без толку, помогите кто может, буду благодарен. Спасибо