Come posso nascondere la sidebar da un post specifico?
Vorrei nascondere la sidebar su un post specifico (non una pagina). Come posso farlo?
Per contesto, ho cercato molto sia su Google che qui. Ho trovato molte soluzioni per mostrare sidebar diverse tra post e pagine, o per mostrare (o nascondere) una sidebar specifica su una pagina specifica, ma nulla che riguardi la rimozione della sidebar da un singolo post specifico.
Ecco un'idea che ho menzionato su Twitter.
function special_post_template( $template ) {
// Identifica una query singola per il post speciale
if ( is_single() && 10 == get_the_ID() )
$template = get_template_directory() . '/special-single.php';
return $template;
}
add_filter( 'template_include', 'special_post_template' );

Un approccio potenziale non consiste tanto nel "nascondere" una sidebar quanto nel non includerla affatto.
Pagine
Ogni pagina del tuo sito può utilizzare un template diverso. Di solito, creerai un template che utilizza quello predefinito ("Template predefinito") che include header, footer, contenuto e sidebar come ci si aspetterebbe normalmente. Tuttavia, puoi creare un nuovo template di pagina per il tuo sito che segua lo stesso formato, ma ometta la sidebar.
In alternativa, se conosci l'ID o lo slug della pagina in questione, puoi creare un template di pagina specifico per quella pagina. Basta inserire uno dei seguenti file nel tuo tema:
- page-{id}.php
- page-{slug}.php
WordPress li caricherà automaticamente.
Articoli
Per gli articoli, però, WordPress non supporta questo tipo di gerarchia. Puoi aggirare il problema creando un custom post type, quindi creando single-{post-type}.php
per visualizzare quel tipo di articolo senza sidebar, ma potrebbe non essere quello che desideri.
Tuttavia, se il tuo tema applica le classi corrette al corpo della pagina, allora puoi filtrare in base all'ID dell'articolo e utilizzare CSS per nascondere gli elementi. Quando usi correttamente body_class()
nel tuo tema, la classe postid-{post-id}
verrà applicata al body. Puoi sfruttare questo a tuo vantaggio.
/* ... Tutte le altre regole CSS */
body.postid-15 .sidebar {
display: none;
}
Lo svantaggio di questo approccio è che il markup della sidebar viene comunque caricato, è solo nascosto tramite CSS. Ma per ora (finché WordPress non implementerà un template per articolo simile a quello che già ha per le pagine), questo dovrebbe essere sufficiente per iniziare.

Che ne dici di una qualche forma di metadati? In questo modo il CSS non dovrà essere aggiornato se gli ID di pagine/post cambiano.

Gli ID di pagine/post non dovrebbero cambiare a meno che tu non stia resettando il tuo database e le chiavi. E se lo stai facendo, ci sono così tante altre cose da sistemare che questa sarebbe una preoccupazione molto minore.

Non potresti semplicemente utilizzare il condizionale is_single()? O non puoi modificare il tuo file single.php. Se puoi, proverei con un'istruzione if per il tuo articolo.
if(is_single('potato-pancake')) {
// niente
} else {
get_sidebar();
}
Per riferimento: http://codex.wordpress.org/Conditional_Tags#A_Single_Post_Page

Voglio che la barra laterale sia nascosta su un singolo post, non su tutti i post.

Se hai bisogno della soluzione per un solo articolo, ottieni l'ID dell'articolo
dal pannello di amministrazione.
(Se passi il mouse sopra il link modifica
, vedrai qualcosa come post=xxx
. xxx
è il tuo ID dell'articolo
)
Quindi modifica il tuo template singolo in questo modo
Supponiamo che l'ID del tuo articolo sia 66
if (!is_single(66)) {
get_sidebar();
}

Se hai bisogno di questa funzionalità in modo continuativo, ti consiglio l'estensione Theme Layouts di Justin Tadlock. Puoi definire i layout che desideri. Ti fornirà una casella radio su ogni articolo in modo da poter specificare il layout necessario per ciascuno.
È facile da implementare se conosci lo sviluppo di temi WordPress. Includi l'estensione, aggiungi add_theme_support per theme-layouts, e sei a buon punto.
È inclusa nel suo framework Hybrid Core, oppure puoi vedere le classi dell'estensione Theme Layouts qui: https://github.com/justintadlock/hybrid-core/tree/master/inc

Secondo me un modo migliore è lavorare con i template dei post.
In questo caso, per nascondere/rimuovere la sidebar da un post specifico segui questi passaggi:
1 - Apri il template dei post del tuo tema, probabilmente single.php
, seleziona tutto e copia il contenuto;
2 - Crea un template secondario per i post, ad esempio nosidebar-posts.php
, incolla il contenuto di single.php
e aggiungi il seguente codice alla riga 1:
<?php
/*
Template Name Posts: Post senza Sidebar
*/
?>
3 - Rimuovi il codice <?php get_sidebar(); ?>
da nosidebar-posts.php
o modificalo come preferisci;
4 - Installa il plugin Custom Post Template;
5 - Vai a modificare un post e noterai un riquadro Post Template, seleziona il template Senza Sidebar e il gioco è fatto.
Ora puoi rimuovere la sidebar da qualsiasi post semplicemente selezionando il template nella pagina di modifica del post e puoi creare template multipli, come a larghezza intera, senza sidebar ecc.

Se utilizzi WordPress 4.7 o versioni successive, puoi applicare i modelli di pagina anche agli articoli del blog. Basta aggiungere 'post' come Template Post Type.
Nel tuo modello di pagina, definiscilo nel seguente modo:
<?php
/*
Template Name: Layout a larghezza intera
Template Post Type: post, page
*/
?>
Ora nella finestra di modifica dell'articolo, dovresti vedere la sezione Attributi pagina che mostra quel modello.
