J'aimerais ajouter une classe de corps en fonction des barres latérales actives et une classe de corps si la zone du widget avant-en-tête est active. Je veux que cela fonctionne, mais j'aimerais simplement savoir s'il existe un meilleur moyen de l'écrire car mon before header widget area function
doit, pour une raison quelconque, être supérieur à mon sidebar function
, sinon mon sidebar function
ne fonctionne pas si mon before header widget area function
est actif. Donc, je suis sûr qu'il y a un mauvais code de pratique quelque part.
Voici celui qui fonctionne:
// add body class if before-header-widget is active
add_filter( 'body_class', 'body_class_before_header' );
function body_class_before_header( $classes ) {
if ( is_active_sidebar( 'before-header-widget-area' ) ) {
$classes[] = 'before-header';
return $classes;
}
}
// add body classes for sidebars
add_filter( 'body_class', 'body_class_layouts' );
function body_class_layouts( $classes ) {
// add body class if both sidebars are active
if ( is_active_sidebar( 'sidebar-right' ) && is_active_sidebar( 'sidebar-left' ) ) {
$classes[] = 'sidebar-content-sidebar';
return $classes;
}
// add body class for if right sidebar is active
elseif ( is_active_sidebar( 'sidebar-right' ) ) {
$classes[] = 'content-sidebar';
return $classes;
}
// add body class for if left sidebar is active
elseif ( is_active_sidebar( 'sidebar-left' ) ) {
$classes[] = 'sidebar-content';
return $classes;
}
// add body class if no sidebars are active
else {
$classes[] = 'full-width-content';
return $classes;
}
}
Mais si j'échange simplement les fonctions dans l'autre sens:
// add body classes for Sidebars
add_filter( 'body_class', 'body_class_layouts' );
function body_class_layouts( $classes ) {
// add body class if both sidebars are active
if ( is_active_sidebar( 'sidebar-right' ) && is_active_sidebar( 'sidebar-left' ) ) {
$classes[] = 'sidebar-content-sidebar';
return $classes;
}
// add body class for if right sidebar is active
elseif ( is_active_sidebar( 'sidebar-right' ) ) {
$classes[] = 'content-sidebar';
return $classes;
}
// add body class for if left sidebar is active
elseif ( is_active_sidebar( 'sidebar-left' ) ) {
$classes[] = 'sidebar-content';
return $classes;
}
// add body class if no sidebars are active
else {
$classes[] = 'full-width-content';
return $classes;
}
}
// add body class if before-header-widget is active
add_filter( 'body_class', 'body_class_before_header' );
function body_class_before_header( $classes ) {
if ( is_active_sidebar( 'before-header-widget-area' ) ) {
$classes[] = 'before-header';
return $classes;
}
}
Aucune de mes classes de barre latérale de mise en page active n'ira dans la balise body si le before-header-widget
est actif. Je ne veux pas que mon sidebars function
ait quelque chose à voir avec ma fonction before-header-widget
. Toute aide appréciée.
Je ne pense pas qu'il existe un moyen beaucoup plus intelligent d'écrire ce code dans un style procédural, votre code a donc l'air d'accord.
Mais il y a une erreur de logique dans votre fonction body_class_before_header()
qui pourrait être à l'origine du problème: Si le bloc conditionnel n'est pas exécuté, la fonction retournera NULL
mais comme il s'agit d'un rappel sur un filtre il doit toujours renvoyer au moins la valeur du paramètre non filtré:
// add body class if before-header-widget is active
add_filter( 'body_class', 'body_class_before_header' );
function body_class_before_header( $classes ) {
if ( is_active_sidebar( 'before-header-widget-area' ) ) {
$classes[] = 'before-header';
//don't return here (only)
}
//return $classes anyway
return $classes;
}
Il y a peut-être une autre petite amélioration syntaxique.
function body_class_layouts( $classes ) {
// add body class if both sidebars are active
if ( is_active_sidebar( 'sidebar-right' ) && is_active_sidebar( 'sidebar-left' ) ) {
$classes[] = 'sidebar-content-sidebar';
}
// add body class for if right sidebar is active
elseif ( is_active_sidebar( 'sidebar-right' ) ) {
$classes[] = 'content-sidebar';
}
// add body class for if left sidebar is active
elseif ( is_active_sidebar( 'sidebar-left' ) ) {
$classes[] = 'sidebar-content';
}
// add body class if no sidebars are active
else {
$classes[] = 'full-width-content';
}
return $classes;
}
J'ai supprimé toutes les instructions return
des blocs conditionnels et les ai déplacées à la fin de la fonction. Cela pourrait aider à éviter un retour NULL
dans certaines conditions.