¿Cómo puedo ocultar la barra lateral de una publicación específica?
Me gustaría ocultar la barra lateral en una publicación específica (no en una página). ¿Cómo puedo hacer esto?
Para contextualizar, he buscado bastante tanto en Google como aquí. Encontré muchas soluciones para mostrar diferentes barras laterales en publicaciones vs páginas, o para mostrar (u ocultar) una barra lateral específica en una página específica, pero nada sobre ocultar la barra lateral de una sola publicación específica.

Aquí está una idea que mencioné en Twitter.
function special_post_template( $template ) {
// Identificar una consulta única para el post especial
if ( is_single() && 10 == get_the_ID() )
$template = get_template_directory() . '/special-single.php';
return $template;
}
add_filter( 'template_include', 'special_post_template' );

Un enfoque potencial no es tanto "ocultar" una barra lateral como no incluirla.
Páginas
Cada página en tu sitio puede usar una plantilla diferente. Normalmente, crearás una plantilla que usa la predeterminada ("Plantilla predeterminada") que incluye el encabezado, pie de página, contenido y barra(s) lateral(es) como normalmente esperarías. Sin embargo, puedes crear una nueva plantilla de página para tu sitio que siga el mismo formato, pero omita la barra lateral.
Alternativamente, si conoces el ID o el slug de la página en cuestión, puedes crear una plantilla de página solo para esa página. Solo coloca uno de los siguientes archivos en tu tema:
- page-{id}.php
- page-{slug}.php
WordPress lo cargará por defecto.
Entradas
Para las entradas, sin embargo, WordPress no soporta este tipo de jerarquía. Puedes solucionarlo creando un tipo de entrada personalizado, luego creando single-{post-type}.php
para mostrar ese tipo de entrada sin barra lateral, pero eso podría no ser lo que deseas.
No obstante, si tu tema está aplicando clases de cuerpo apropiadas, entonces puedes filtrar basado en el ID de la entrada nuevamente y usar CSS para ocultar elementos. Cuando usas correctamente body_class()
en tu tema, la clase postid-{post-id}
se aplicará al cuerpo. Puedes usar esto a tu favor.
/* ... Todas tus demás reglas CSS */
body.postid-15 .sidebar {
display: none;
}
La desventaja de este enfoque es que el marcado de la barra lateral aún se carga, solo está oculto con CSS. Pero por ahora (hasta que WordPress implemente una plantilla por entrada similar a la que ya tiene por página), esto debería ser suficiente para comenzar.

¿Qué tal alguna forma de metadatos? De esta manera el CSS no tendrá que ser actualizado si los IDs de páginas/posts cambian.

Los IDs de páginas/posts no deberían cambiar a menos que estés reiniciando tu base de datos y claves. Y si estás haciendo eso, entonces hay suficientes otras cosas ocurriendo como para que esto sea una preocupación mucho menor.

¿No podrías simplemente usar el condicional is_single()? ¿O no puedes modificar tu archivo single.php? Si puedes, probaría con una sentencia if para tu publicación.
if(is_single('potato-pancake')) {
// nada
} else {
get_sidebar();
}
Como referencia: http://codex.wordpress.org/Conditional_Tags#A_Single_Post_Page

Quiero que la barra lateral esté oculta en una entrada, no en todas las entradas.

Si necesitas la solución para un solo post, entonces obtén el post id
desde tu panel de administración.
(Si pasas el cursor sobre el enlace de edición
, verás algo como post=xxx
. xxx
es tu post id
)
Luego cambia tu plantilla individual así:
Digamos que tu ID de post es 66
if (!is_single(66)) {
get_sidebar();
}

Si necesitas esto de forma continua, recomiendo la extensión Theme Layouts de Justin Tadlock. Puedes definir los diseños que desees. Te proporcionará un cuadro de radio en cada entrada para que puedas especificar el diseño que necesitas para cada una.
Es fácil de hacer si conoces el desarrollo de temas para WordPress. Incluye la extensión, añade add_theme_support para theme-layouts, y estarás en camino.
Está incluido en su framework Hybrid Core, o puedes ver las clases de la extensión Theme Layouts aquí: https://github.com/justintadlock/hybrid-core/tree/master/inc

En mi opinión, una mejor forma es trabajar con plantillas de posts.
En ese caso, para ocultar/eliminar la barra lateral de un post específico sigue estos pasos:
1 - Abre la plantilla de post de tu tema, probablemente single.php
, selecciona todo y copia el contenido;
2 - Crea una plantilla de post secundaria, por ejemplo nosidebar-posts.php
, pega el contenido de single.php
y añade el siguiente código en la línea 1:
<?php
/*
Template Name Posts: Posts sin Barra Lateral
*/
?>
3 - Elimina el <?php get_sidebar(); ?>
de nosidebar-posts.php
o edítalo como prefieras;
4 - Instala el Plugin Custom Post Template;
5 - Ve a editar el post y notarás un cuadro de Plantilla de Post, selecciona la plantilla "No Sidebar" y listo.
Ahora puedes eliminar la barra lateral de cualquier post simplemente seleccionando la plantilla en tu página de edición de posts y puedes crear múltiples plantillas, como ancho completo, sin barras laterales, etc.

Si estás en WordPress 4.7 o superior, puedes aplicar las plantillas de página también en las entradas del blog. Solo agrega 'post' como Tipo de Publicación de la Plantilla.
En tu plantilla de página, defínela de la siguiente manera:
<?php
/*
Template Name: Diseño de ancho completo
Template Post Type: post, page
*/
?>
Ahora en la ventana del editor de entradas, deberías ver la sección Atributos de página mostrando esa plantilla.
