Как скрыть сайдбар для определенной записи?
Я хочу скрыть сайдбар на определенной записи (не странице). Как это можно сделать?
Для справки: я уже много искал и в Google, и здесь. Нашел много решений для отображения разных сайдбаров для записей и страниц, или для показа (или скрытия) определенного сайдбара на конкретной странице, но ничего о скрытии сайдбара для отдельной записи.
Вот идея, о которой я упоминал в Twitter.
function special_post_template( $template ) {
// Определяем одиночный запрос для специальной записи
if ( is_single() && 10 == get_the_ID() )
$template = get_template_directory() . '/special-single.php';
return $template;
}
add_filter( 'template_include', 'special_post_template' );

Один из возможных подходов заключается не столько в "скрытии" боковой панели, сколько в её отсутствии в шаблоне.
Страницы
Каждая страница вашего сайта может использовать отдельный шаблон. Обычно вы просто создаёте шаблон, использующий стандартный вид ("Шаблон по умолчанию"), который включает заголовок, подвал, контент и боковые панели, как вы привыкли. Однако вы можете создать новый шаблон страницы для своего сайта, который сохраняет форматирование, но исключает боковую панель.
Кроме того, если вы знаете ID или ярлык (slug) конкретной страницы, вы можете создать шаблон страницы именно для этой страницы. Просто разместите один из следующих файлов в своей теме:
- page-{id}.php
- page-{slug}.php
WordPress автоматически загрузит его.
Записи
Для записей WordPress не поддерживает такую иерархию. Вы можете обойти это, создав пользовательский тип записи, а затем файл single-{post-type}.php
для отображения этого типа записи без боковой панели, но это может быть не совсем то, что вам нужно.
Однако, если ваша тема правильно применяет классы к тегу body, вы можете фильтровать по ID записи и использовать CSS для скрытия элементов. При правильном использовании функции body_class()
в вашей теме, к тегу body будет добавлен класс вида postid-{post-id}
. Вы можете этим воспользоваться.
/* ... Все остальные CSS-правила */
body.postid-15 .sidebar {
display: none;
}
Недостаток этого подхода в том, что разметка боковой панели всё равно загружается, она просто скрывается с помощью CSS. Но пока (до тех пор, пока WordPress не реализует шаблоны для отдельных записей, аналогичные существующим для страниц), этого должно быть достаточно для начала.

Как насчет какой-нибудь формы метаданных? Таким образом, CSS не придется обновлять, если изменятся ID страниц/записей.

ID страниц и записей не должны меняться, если вы не сбрасываете базу данных и ключи. А если вы это делаете, то происходит столько всего другого, что это будет гораздо менее значительной проблемой.

Разве вы не можете просто использовать условный тег is_single()? Или у вас нет возможности редактировать файл single.php. Если возможно, я бы попробовал использовать условный оператор для вашей записи.
if(is_single('potato-pancake')) {
// ничего
} else {
get_sidebar();
}
Для справки: http://codex.wordpress.org/Conditional_Tags#A_Single_Post_Page

Я хочу скрыть боковую панель на одной записи, а не на всех записях.

Если вам нужно решение только для одной записи, то получите post id
из админ-панели.
(Если навести курсор на ссылку редактирования
, вы увидите что-то вроде post=xxx
. xxx
— это ваш post id
)
Затем измените шаблон одиночной записи следующим образом:
Допустим, ID вашей записи — 66
if (!is_single(66)) {
get_sidebar();
}

Если вам нужно это на постоянной основе, я рекомендую расширение Theme Layouts от Justin Tadlock. Вы можете определить нужные вам макеты. Оно добавит переключатель (radio box) к каждой записи, чтобы вы могли указать необходимый макет для каждой.
Это легко сделать, если вы знакомы с темизацией WordPress. Подключите расширение, добавьте add_theme_support для theme-layouts, и вы на правильном пути.
Оно включено в его фреймворк Hybrid Core, или вы можете посмотреть классы расширения Theme Layouts здесь: https://github.com/justintadlock/hybrid-core/tree/master/inc

На мой взгляд, лучший способ — работать с шаблонами записей.
В этом случае, чтобы скрыть/удалить боковую панель из конкретной записи, выполните следующие шаги:
1 - Откройте шаблон записи вашей темы, скорее всего single.php
, выделите все и скопируйте содержимое;
2 - Создайте дополнительный шаблон записи, например nosidebar-posts.php
, вставьте содержимое из single.php
и добавьте следующий код в первой строке:
<?php
/*
Template Name Posts: Записи без боковой панели
*/
?>
3 - Удалите <?php get_sidebar(); ?>
из nosidebar-posts.php
или отредактируйте по своему усмотрению;
4 - Установите плагин Custom Post Template;
5 - Перейдите к редактированию записи, и вы увидите блок "Шаблон записи", выберите шаблон "Без боковой панели" и готово.
Теперь вы можете убирать боковую панель из любой записи, просто выбирая шаблон на странице редактирования. Также вы можете создавать несколько шаблонов, например, полная ширина, без боковых панелей и т.д.

Если у вас WordPress версии 4.7 или выше, вы можете применять шаблоны страниц к записям блога. Просто добавьте post в Template Post Type.
В вашем шаблоне страницы определите его следующим образом:
<?php
/*
Template Name: Полноширинный макет
Template Post Type: post, page
*/
?>
Теперь в окне редактора записи вы должны увидеть раздел "Атрибуты страницы", отображающий этот шаблон.
