Cum pot ascunde bara laterală pentru un anumit articol?
Aș dori să ascund bara laterală pe un anumit articol (nu pagină). Cum pot face acest lucru?
Pentru context, am căutat destul de mult atât pe Google cât și aici. Găsesc multe soluții pentru afișarea diferitelor bare laterale pe articole vs. pagini, sau pentru afișarea (sau ascunderea) unei anumite bare laterale pe o anumită pagină, dar nimic despre ascunderea barei laterale de la un singur articol specific.

Iată o idee pe care am menționat-o pe Twitter.
function special_post_template( $template ) {
// Identifică o interogare singulară pentru postarea specială
if ( is_single() && 10 == get_the_ID() )
$template = get_template_directory() . '/special-single.php';
return $template;
}
add_filter( 'template_include', 'special_post_template' );

O abordare posibilă nu este atât de mult „ascunderea” unei bare laterale, cât mai degrabă neincluderea ei.
Pagini
Fiecare pagină din site-ul tău poate folosi un șablon diferit. De obicei, vei crea un șablon care utilizează cel implicit („Șablon implicit”) care include antetul, subsolul, conținutul, barele laterale, așa cum te-ai aștepta în mod normal. Cu toate acestea, poți crea un șablon de pagină nou pentru site-ul tău care urmează același format, dar omite bara laterală.
Alternativ, dacă cunoști ID-ul sau slug-ul paginii în cauză, poți crea un șablon de pagină doar pentru acea pagină. Pur și simplu plasează unul dintre următoarele fișiere în tema ta:
- page-{id}.php
- page-{slug}.php
WordPress le va încărca în mod implicit.
Articole
Totuși, pentru articole, WordPress nu acceptă acest tip de ierarhie. Poți ocoli această limitare prin crearea unui tip de postare personalizată, apoi creând single-{post-type}.php
pentru a afișa acel tip de postare fără o bară laterală, dar asta s-ar putea să nu fie ceea ce dorești.
Cu toate acestea, dacă tema ta aplică clase de corp adecvate, atunci poți filtra în funcție de ID-ul articolului și folosi CSS pentru a ascunde elemente. Când folosești corect body_class()
în tema ta, clasa postid-{post-id}
va fi aplicată corpului. Poți profita de acest lucru.
/* ... Toate celelalte reguli CSS */
body.postid-15 .sidebar {
display: none;
}
Dezavantajul acestei abordări este că marcajul barei laterale este încă încărcat, doar că este ascuns cu CSS. Dar pentru moment (până când WordPress va implementa un șablon pe articol similar cu cel pe pagină pe care îl are deja), acest lucru ar trebui să fie suficient pentru a începe.

Ce zici de o formă de metadate? Astfel, CSS-ul nu va trebui actualizat dacă ID-urile paginilor/postărilor se schimbă.

ID-urile paginilor/postărilor nu ar trebui să se schimbe decât dacă resetezi baza de date și cheile. Și dacă faci asta, atunci sunt suficiente alte lucruri care se întâmplă încât aceasta ar fi o problemă mult mai mică.

Nu ai putea să folosești condiția is_single()? Sau nu poți modifica fișierul single.php? Dacă poți, aș încerca o declarație if pentru articolul tău.
if(is_single('potato-pancake')) {
// nimic
} else {
get_sidebar();
}
Pentru referință: http://codex.wordpress.org/Conditional_Tags#A_Single_Post_Page

Vreau ca bara laterală să fie ascunsă la un singur articol, nu la toate articolele.

Dacă ai nevoie de soluția pentru un singur articol, atunci obține ID-ul articolului
din panoul de administrare.
(Dacă treci cu mouse-ul peste link-ul de editare
, vei vedea ceva de genul post=xxx
. xxx
este ID-ul articolului
)
Apoi modifică template-ul pentru articolul unic astfel:
Să presupunem că ID-ul articolului tău este 66
if (!is_single(66)) {
get_sidebar();
}

Dacă ai nevoie de această funcționalitate în mod continuu, recomand extensia Theme Layouts de la Justin Tadlock. Poți defini layout-urile dorite. Aceasta va adăuga un câmp radio pentru fiecare articol, astfel încât să poți specifica layout-ul necesar pentru fiecare în parte.
Este ușor de implementat dacă cunoști tematica WordPress. Include extensia, adaugă add_theme_support pentru theme-layouts și ești pe drumul cel bun.
Este inclusă în cadrul său Hybrid Core, sau poți vedea clasele extensiei Theme Layouts aici: https://github.com/justintadlock/hybrid-core/tree/master/inc

În opinia mea, o metodă mai bună este să lucrezi cu șabloane de articole.
În acest caz, pentru a ascunde/elimina bara laterală dintr-un anumit articol, urmează acești pași:
1 - Deschide șablonul tău de articol, probabil single.php
, selectează tot și copiază conținutul;
2 - Creează un șablon secundar de articol, de exemplu nosidebar-posts.php
, lipește conținutul din single.php
și adaugă următorul cod pe prima linie:
<?php
/*
Template Name Posts: Articole fără bara laterală
*/
?>
3 - Elimină <?php get_sidebar(); ?>
din nosidebar-posts.php
sau modifică după preferințe;
4 - Instalează Pluginul Custom Post Template;
5 - Mergi la editarea articolului și vei observa o casetă Post Template, selectează șablonul Fără bară laterală și ai terminat.
Acum poți elimina bara laterală din orice articol prin simpla selectare a șablonului în pagina de editare a articolului și poți crea multiple șabloane, precum lățime completă, fără bare laterale etc.

Dacă utilizați WordPress 4.7 sau o versiune mai recentă, puteți aplica șabloanele de pagină și pentru articolele de blog. Adăugați pur și simplu post ca Template Post Type.
În șablonul de pagină, definiți-l astfel:
<?php
/*
Template Name: Layout cu lățime completă
Template Post Type: post, page
*/
?>
Acum, în fereastra editorului de articole, ar trebui să vedeți secțiunea Atribute pagină care afișează acel șablon.
