Как скрыть сайдбар для определенной записи?

25 февр. 2013 г., 18:50:12
Просмотры: 14.4K
Голосов: 1

Я хочу скрыть сайдбар на определенной записи (не странице). Как это можно сделать?

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

3
Комментарии

Что вы обнаружили в своих исследованиях?

brasofilo brasofilo
25 февр. 2013 г. 18:58:46

@brasofilo Я нашел много информации о том, как показывать разный сайдбар на страницах, или как показывать разные сайдбары для записей и страниц, но ничего, что применимо к скрытию сайдбара для отдельной конкретной записи. Если только вы не нашли что-то, что я упустил...

ahockley ahockley
25 февр. 2013 г. 19:39:48

Добавить чекбокс на экран редактирования записи?

paul paul
25 февр. 2013 г. 21:29:58
Все ответы на вопрос 7
0

Вот идея, о которой я упоминал в 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' );
26 февр. 2013 г. 06:43:33
3

Один из возможных подходов заключается не столько в "скрытии" боковой панели, сколько в её отсутствии в шаблоне.

Страницы

Каждая страница вашего сайта может использовать отдельный шаблон. Обычно вы просто создаёте шаблон, использующий стандартный вид ("Шаблон по умолчанию"), который включает заголовок, подвал, контент и боковые панели, как вы привыкли. Однако вы можете создать новый шаблон страницы для своего сайта, который сохраняет форматирование, но исключает боковую панель.

Кроме того, если вы знаете 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 не реализует шаблоны для отдельных записей, аналогичные существующим для страниц), этого должно быть достаточно для начала.

25 февр. 2013 г. 19:52:33
Комментарии

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

nvwd nvwd
25 февр. 2013 г. 19:59:09

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

EAMann EAMann
25 февр. 2013 г. 20:02:01

Давайте попробуем другой аргумент... Если вы хотите указать, у каких записей не должно быть сайдбара, метаданные позволят установить это для каждой записи индивидуально. Затем шаблон может проверять метаданные, чтобы принять решение.

nvwd nvwd
25 февр. 2013 г. 20:10:37
2

Разве вы не можете просто использовать условный тег is_single()? Или у вас нет возможности редактировать файл single.php. Если возможно, я бы попробовал использовать условный оператор для вашей записи.

if(is_single('potato-pancake')) {
   // ничего
} else {
   get_sidebar();
} 

Для справки: http://codex.wordpress.org/Conditional_Tags#A_Single_Post_Page

25 февр. 2013 г. 20:02:43
Комментарии

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

ahockley ahockley
25 февр. 2013 г. 20:22:45

На самом деле, этот код делает именно это. Если вы просматриваете запись с указанным ярлыком (slug), ничего не делать. В противном случае (т.е. для всех остальных записей) показывать боковую панель.

EAMann EAMann
25 февр. 2013 г. 20:57:27
0

Если вам нужно решение только для одной записи, то получите post id из админ-панели.

(Если навести курсор на ссылку редактирования, вы увидите что-то вроде post=xxx. xxx — это ваш post id)

Затем измените шаблон одиночной записи следующим образом:

Допустим, ID вашей записи — 66

if (!is_single(66)) {
   get_sidebar();
} 
25 февр. 2013 г. 20:32:42
0

Если вам нужно это на постоянной основе, я рекомендую расширение 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

25 февр. 2013 г. 22:46:31
1

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

В этом случае, чтобы скрыть/удалить боковую панель из конкретной записи, выполните следующие шаги:

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 - Перейдите к редактированию записи, и вы увидите блок "Шаблон записи", выберите шаблон "Без боковой панели" и готово.

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

26 февр. 2013 г. 07:38:14
Комментарии

Плагин работает с WP 3.5.1!

drabello drabello
26 февр. 2013 г. 08:00:42
0

Если у вас WordPress версии 4.7 или выше, вы можете применять шаблоны страниц к записям блога. Просто добавьте post в Template Post Type.

В вашем шаблоне страницы определите его следующим образом:

<?php 
/*
Template Name: Полноширинный макет
Template Post Type: post, page
*/
?>

Теперь в окне редактора записи вы должны увидеть раздел "Атрибуты страницы", отображающий этот шаблон.

Ссылка: https://developer.wordpress.org/themes/template-files-section/page-template-files/#creating-page-templates-for-specific-post-types

18 янв. 2018 г. 12:23:51