body_class filter – Gibt es eine bessere Möglichkeit, diesen Code zu schreiben?

Ich möchte eine Body-class hinzufügen, abhängig davon, welche Seitenleisten aktiv sind, und eine Body-class, wenn mein Widgetbereich vor dem Header aktiv ist. Ich habe es zur Arbeit, aber ich möchte nur wissen, ob es eine bessere Möglichkeit gibt, es zu schreiben, da meine before header widget area function aus irgendeinem Grund über meiner sidebar function , sonst sidebar function meine sidebar function nicht Meine before header widget area function ist aktiv. Ich bin mir sicher, dass irgendwo ein schlechter Übungscode drin ist.

Hier ist die Arbeit:

 // 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; } } 

Aber wenn ich einfach die functionen in die andere Richtung tausche:

  // 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; } } 

Keine meiner aktiven Layout-Seitenleistenklassen wird in das body-Tag aufgenommen, wenn das before-header-widget aktiv ist. Ich möchte nicht, dass meine sidebars function etwas mit meiner before-header-widget function zu tun haben. Jede Hilfe wird geschätzt.

Solutions Collecting From Web of "body_class filter – Gibt es eine bessere Möglichkeit, diesen Code zu schreiben?"

Ich glaube nicht, dass es eine viel klügere Möglichkeit gibt, diesen Code in einem prozeduralen Stil zu schreiben, also sieht Ihr Code im Prinzip gut aus.

Aber es gibt einen logischen Fehler in der function body_class_before_header() , der das Problem verursachen könnte: Wenn der bedingte Block nicht ausgeführt wird, gibt die function NULL aber als callback auf einem Filter sollte immer mindestens der ungefilterte Parameterwert zurückgegeben werden:

 // 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; } 

Es gibt vielleicht noch eine kleine Syntaxverbesserung.

 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; } 

Ich habe alle return aus den bedingten Blöcken entfernt und sie an das Ende der function verschoben. Dies kann dazu beitragen, eine NULL Rückgabe unter bestimmten Bedingungen zu vermeiden.