Проверка принадлежности поста к конкретной категории или любой вложенной в эту категорию под-категории
Страницы: 1
[ Закрыто ] Проверка принадлежности поста к конкретной категории или любой вложенной в эту категорию под-категории, Не работает условие (((
Здравствуйте уважаемые, опишу все поэтапно:
Общая информация. Стоит передо мной следующая задача, есть категория на сайте (ее 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. Как я понимаю, ошибку допускаю я, на этапе проверки принадлежность поста к конкретной категории. Вчера пол дня с этим возился и без толку, помогите кто может, буду благодарен. Спасибо
Будьте внимательныФункция
Код
in_category() 
Работает ВНУТРИ single и проверяет принадлежность поста к указанной категории

Для того чтобы проверять ID текущей категории используется функция

Код
is_category()
 
Решение:
 1. Создаете шаблон category-slug.php Slug - имя базовой категории
Например,  category-month.php будет выводить запросы к site.com/category/month , а также всем вложенным site.com/category/month/1 , site.com/category/month/2 и тд
2. в этом шаблоне пишете тот код который будет выводить эту категорию и все дочерние категории этой категории

В случае, если необходимо чтобы в главной и дочерних отображались разные данные делаете проверку в шаблоне category-slug.php 

Код
<?php  
 if(is_category(6)){код главной категории}    
 elseif(!is_category(6)) {код дочерней категории}  
?>
Изменено: Денис Мешков - 16 Марта 2016 12:55
Денис Мешков, мне нужно в category-6.php и всех ее подкатегориях одинаковый шаблон, а на всем остальном сайте использовать шаблон category.php , значит надо сделать так:[FONT=Tahoma, Arial, Helvetica, sans-serif]1. [/FONT]category.php не трогаю, тоесть проверку оттуда убираю.
2. В category-6.php добавляю следующее:



Код
<?php  
 if ( is_category( 6 ) || post_is_in_descendant_category( 6 ) ) {код уникальной категории}    
 elseif (!is_category(6)) {get_template_part('category');} //визов шаблона категории для остального сайта  
?> 


правильно?
Изменено: Chmil - 16 Марта 2016 12:59
Забыл добавить функцию которая по "иному"  принципу распределяет шаблоны к категориям
1.

Добавляем в functions.php


Код
 function new_subcategory_hierarchy() { 
    $category = get_queried_object();

    $parent_id = $category->category_parent;

    $templates = array();

    if ( $parent_id == 0 ) {
        // Use default values from get_category_template()
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";
        $templates[] = 'category.php';     
    } else {
        // Create replacement $templates array
        $parent = get_category( $parent_id );

        // Current first
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";

        // Parent second
        $templates[] = "category-{$parent->slug}.php";
        $templates[] = "category-{$parent->term_id}.php";
        $templates[] = 'category.php'; 
    }
    return locate_template( $templates );
}

add_filter( 'category_template', 'new_subcategory_hierarchy' );


2.

Создаем шаблон - category-{slug of cat_id 6}.php

3.

Внутрь созданного шаблона копируем нативный код из category.php

4.

Контентную часть заворачиваем условие:


Код
<?php  
if(is_category(6)){код главной категории}    
elseif(!is_category(6)) {код дочерней категории}  
?> 
В результате:
Все категории, которые являются дочерними категории с iD=6, а также категория с ID=6 будут обрабатываться из файла category-{slug of cat_id 6}.php
Изменено: Денис Мешков - 16 Марта 2016 13:12
спасибо, сейчас немного с работой разберусь и попробую, как я понял функция post_is_in_descendant_category­ более не нужна?
Chmil, если вы добавите представленный выше код в function то не нужна
Денис Мешков, прошу прощения за мою тупость, но еще один вопрос - код главной категории - ето код не модифицырованого шаблона категории или уже с нужнымы мне изменениями?smile:confused:
Chmil, какой код ставить дело уже ваше -) я представил схему по которой из конкретного шаблона будут обрабатываться главная категория и ее дочки. Ставьте тот код, которым ходите выводить эти страницы
ЗЫ: Поставьте не модифицированный код, и его уже правьте. ИМХО
Изменено: Денис Мешков - 16 Марта 2016 13:41
Не работает, вот какой у меня category-6.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() ) : ?>

         <?php  
            if (is_category(6)) { ?>
            
            <header class="page-header">
               <div class="zagl"><h1>Рішення сесій Крихівецької сільської ради</h1></div>
<div class="category-archive-meta">&nbsp;</div>
            </header>
            
            <?php admired_content_nav( 'nav-above' ); ?>
<div class="pagefr">
            <?php /* Start the Loop */ ?>
            <?php
                  $category_description = category_description();
                  if ( ! empty( $category_description ) )
                     echo apply_filters( 'category_archive_meta', '<div class="category-archive-meta">' . $category_description . '</div>' );
               ?>
            
            <?php while ( have_posts() ) : the_post(); ?>


<div class="pagefrl"><img src="http://krykhivtsi.if.ua/wp-content/themes/admired/images/icon-for-doc.png" width="25" height="25"></div>
<h3 class="titlefr"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<?php the_excerpt( __( 'Читати далі &rarr;', 'admired' ) ); ?>


            <?php endwhile; ?>
</div>
            <?php admired_pagination(); ?> 
            
            <?php } ?> 
            
            <?php elseif (!is_category(6)) { ?> 
         
            <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 } ?>

         <?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(); ?>
 
Chmil, 

вот так перепиши
Код
<?php if(is_category(6)): ?>
main
<?php elseif(!is_category(6)): ?>
child
<?php endif;?>
 
Изменено: Денис Мешков - 16 Марта 2016 20:49
Огромное спасибо Денису Мешкову, решил проблему + проконсультировал в инных вопросах, очень мне помог, тему можно закрывать:)
Цитата
Chmil пишет:
тему можно закрывать

Chmil, спасибо, что отписались в теме и скинули в ЛС.
Тему закрыл.

* обращение к пользователям - > если Ваша тема потеряла свою актуальность, то, пожалуйста, отпишитесь об этом в теме и скиньте ссылку на тему мне в ЛС.
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)
Новые темыОбъявленияСвободное общение
15:28 LGaming - экосистема и партнерская программа в gambling и betting вертикалях 
21:49 Как правильно покупать ссылки для поддомена? 
18:51 Роскомнадзор отказал в регистрации трети блогеров-десятитысячников 
12:53 где много готовых фавиконок 
22:59 Webvork - международная товарная СРА сеть с сертифицированными офферами на Европу. 
12:32 «Хлебные крошки» в адресе сайтов исчезнут из результатов поиска Google 
23:27 Adfinity - Ваш надежный партнер в монетизации трафика 
17:18 Продам обменник криптовалюты, а также новый обменник под ключ с обучением. Скидки на скрипты обменника 
15:28 Прием платежей для HIGH RISK | Прием платежей без сайта 
15:25 Рассылка в TELEGRAM |Большой опыт работы | Любые тематики | Лучшая конверсия 
15:12 Услуги рассылки Viber|Whatsapp|IMO. 
14:43 Belurk — высокоскоростные анонимные прокси от 0,24 рублей 
12:45 Прокси IPv6 Россия 
05:16 Просто $0.04/IP 9PROXY.COM Резидентные прокси Неограниченная пропускная способность Уникальная политика замены Без чёрного списка 
08:12 Ням-ням! - 8 деликатесов, которые когда-то ели только бедные люди 
07:48 США готовят закон для уничтожения пиратских сайтов во всех странах мира 
02:50 Точные прогнозы на футбол 
02:10 [Новая партнерка] Goldbet Partners — прямой рекламодатель одноименного казино Goldbet 
21:19 С юмором по жизни! 
18:15 Telegram уничтожил официальный канал легендарного российского торрент-трекера 
18:19 Уникальный сервис SEO продвижения