Уговариваем дочерние рубрики использовать шаблон родительских

Рубрики WordPress следуют определенной иерархии шаблонов. В большинстве случаев мы используем “category-$slug.php” для перезаписи определенной рубрики для придания ей полностью другого вида и функциональности (“category-projects.php” для рубрики “Project”). Если у вас есть дочерние рубрики (Дизайн (Design), Разработка (Development) и т.д.) в «Проектах», они также подчиняются иерархии шаблонов, и вам необходимо будет создавать “category-design.php” и “category-development.php” для придания им такого же вида, как и у рубрики Проекта. Сниппет, предлагаемый в этой статье, позволит вам настроить несколько или все дочерние рубрики чтобы те использовали родительский шаблон. В предложенном выше примере рубрики Design и Development также будут использовать шаблон “category-projects.php” вместо их собственного шаблона “category-$slug.php”.

Сниппет

add_action('template_redirect', 'wpds_parent_category_template');
function wpds_parent_category_template()
{
    if (!is_category())
        return true; 

    // получаем объект текущей рубрики
    $cat = get_category(get_query_var('cat'));
    
    while ($cat && !is_wp_error($cat)) {
        $template = TEMPLATEPATH . "/category-{$cat->slug}.php";
        // загружаем, если файл шаблона существует.
        if (file_exists($template)) {
            load_template($template);
            exit;
        }

        $cat = $cat->parent ? get_category($cat->parent) : false;
    }
}

Перезапись шаблона для определенных рубрик

Только дочерняя для “Projects” рубрика “Design” будет использовать “category-projects.php”.

add_action('template_redirect', 'wpds_parent_category_template');
function wpds_parent_category_template()
{
    if (!is_category())
        return true; 

    // Перезаписываем шаблон для определенной рубрики "design", чьей родительской рубрикой является "projects" 
    if (is_category('design') && cat_is_ancestor_of(get_cat_id('projects'), get_query_var('cat'))) {
        $cat = $cat->parent ? get_category($cat->parent) : false;
        $template = TEMPLATEPATH . "/category-{$cat->slug}.php";
        // загружаем, если файл шаблона существует.
        if (file_exists($template)) {
            load_template($template);
            exit;
        }
    }
}

По всем вопросам и отзывам просьба писать в комментарии ниже.

Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.

Источник: WPDevSnippets

VN:F [1.9.22_1171]
Rating: 3.2/5 (5 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
  • Anton Philin

    куда Сниппет вписывать??

    • http://web-devise.com/ ADv

      Как обычно, в functions.php вашей темы.

  • Бобик Газикович

    А можете подробно описать как перенести тему из родительской в детскую, на уже существующем сайте, возможно ли это?

    • http://web-devise.com/ ADv

      Возможно, конечно. Но в двух словах, и даже в двадцати не объяснить.

  • Камиль

    Здравствуйте. Вопрос такой. Как вывести дочерние категории только у родителя? Сейчас «дочки» выводятся у меня и у родителя, и у самих дочек

Scroll To Top