Меняем шаблон для всех записей рубрики в Вордпресс
В Вордпресс нельзя сделать шаблон для всех записей какой-то определенной рубрики привычным способом. Сегодня я покажу, как это обойти.
Я вчера рассказывал каким образом в Вордпресс можно сделать разную длину анонсов записи в зависимости от присвоенной записи рубрики. Заодно напомнил, что в Вордпресс имеется прекрасный внутренний механизм шаблонов. Благодаря которому быстро и легко создаются индивидуальные шаблоны для любых типов данных и таксономий. В том числе и для архивов рубрик, о которых и шла речь.
Один внимательный читатель совершенно верно заметил, что в Вордпресс нельзя сделать шаблон для всех записей рубрики. Имеется в виду single.php. Да, действительно, привычным способом это сделать не получится.
В single.php можно задать индивидуальный шаблон лишь для конкретных записей. Например, сверстав его заранее, назначать каждый раз при публикации. Что применимо далеко не во всех случаях. С недавних пор, а именно начиная с Вордпресс версии 4.4, появился встроенный механизм шаблонов записей такого вида: single-{post-type}-{slug}.php. Где {post-type} — тип данных, а {slug} — короткое имя записи. То есть для стандартных записей, нужно указывать тип данных post, для кастомных (CPT) соответствующие им имена. Ну, а {slug}, напомню, это короткое имя записи, которое указывается в URL записи.
Так как же в Вордпресс создать шаблон для записей конкретной категории?
На самом деле всё очень просто. Для этого можно воспользоваться небольшим хуком, который традиционно размещаем в файле functions.php активной темы или в функциональном плагине сайта.
add_filter('single_template', create_function( '$the_template', 'foreach( (array) get_the_category() as $cat ) { if ( file_exists(TEMPLATEPATH . "/single-{$cat->slug}.php") ) return TEMPLATEPATH . "/single-{$cat->slug}.php"; } return $the_template;' ) );
В результате, мы сможем создавать шаблон для записей рубрик следующим образом: single-{cat-slug}.php. Где {cat-slug} — короткое имя рубрики.
И всё.
Фулстек веб‑разработчик, специализируюсь на платформе WordPress
Подробнее
Скопируйте и переименуйте content-archive.php в content-archive-test.php, а в функцию (functions.php) добавьте такое условие
elseif ( is_category(‘test’) ) {
get_template_part( ‘content-archive-test’, get_post_type() );
}
Где-нибудь здесь, наверное
if ( is_home() || is_archive() || is_search() ) {
if ( !empty( $layout ) && $layout != ‘simple’ && $wp_query->current_post != 0 ) {
get_template_part( ‘content-archive-‘ . esc_attr( $layout ), get_post_type() );
} elseif ( is_category(‘test’) ) {
get_template_part( ‘content-archive-test’, get_post_type() );
} else {
get_template_part( ‘content-archive’, get_post_type() );
}
} elseif ( in_category(‘test’) ) {
get_template_part( ‘content-test’, get_post_type() );
} else {
get_template_part( ‘content’, get_post_type() );
}
Объясню по порядку.
В моей теме » Photoline Lite» можно выбирать шаблон к страницам, а к рубрикам и записям — нет, только базовый 🙁
Шаблонов к страницам аж 4! Мне нужно изменить шаблон в записях (рубрике).
Если я размещу хук в файле functions.php активной темы , то как мне изменить шаблон к записей или рубрике? Чисто технически не поняла…
single-{cat-slug}.php, где {cat-slug} — короткое имя рубрики. — Это всё где я должна проделывать?
И если в теме уже есть несколько шаблонов, может можно имя нужного мне шаблона куда-то вставить?) Заранее спасибо и простите за возможно смешные вопросы чайника)
Для записей — берете имеющийся в теме single.php, копируете, переименовываете его в single-{cat-slug}.php и вносите все изменения, которые должны быть в записях рубрики {cat-slug}.
Для рубрик — берете category.php, копируете, переименовываете его в category-{cat-slug}.php — это будет шаблон рубрики {cat-slug}. Если category.php в теме нет, попробуйте использовать archive.php, index.php, taxonomy.php
Полная иерархия шаблонов Вордпресс есть в Кодексе
Вам нужно создать шаблон и добавить еще одно условие в функцию.
Допустим, рубрика называется ‘test’.
Возьмите content.php, скопируйте и переименуйте его в content-test.php
А в functions.php найдите функцию ct_mission_news_get_content_template() и перед последним else добавьте условие
elseif ( in_category(‘test’) ) {
get_template_part( ‘content-test’, get_post_type() );
}
Вся функция будет выглядеть так
if ( ! function_exists( ‘ct_mission_news_get_content_template’ ) ) {
function ct_mission_news_get_content_template() {
global $wp_query;
$layout = get_theme_mod( ‘layout’ );
// output ad widget area after first post
if ( is_main_query() && $wp_query->current_post == 1 ) {
get_sidebar( ‘after-first-post’ );
}
if ( is_home() || is_archive() || is_search() ) {
if ( !empty( $layout ) && $layout != ‘simple’ && $wp_query->current_post != 0 ) {
get_template_part( ‘content-archive-‘ . esc_attr( $layout ), get_post_type() );
} else {
get_template_part( ‘content-archive’, get_post_type() );
}
} elseif ( in_category(‘test’) ) {
get_template_part( ‘content-test’, get_post_type() );
} else {
get_template_part( ‘content’, get_post_type() );
}
}
}
content-test.php — это будет шаблон записей рубрики ‘test’.