web-dev-qa-db-fra.com

Wordpress php filter admin_body_class ne fonctionne pas

J'ai la fonction suivante dans un plugin que j'ai construit:

static function filter_add_body_classes( $body_classes ) {

    $new_classes = array();

    // Only when logged in
    if ( ! is_user_logged_in() ) {
        return $body_classes;
    }

    // If viewing the site
    if ( ! is_admin() ) {
        $new_classes[] = 'sat-site';
    }

    // If theming is enabled
    if ( Skizzar_Admin_Theme::is_themed() ) {
        $new_classes[] = 'sat-theme';
    }

    // If a custom logo image is provided and the menu logo hiding option is not enabled
    if ( Skizzar_Admin_Theme_Options::get_saved_network_option( 'logo-image' ) && ! Skizzar_Admin_Theme_Options::get_saved_network_option( 'hide-menu-logo' ) ) {
        $new_classes[] = 'sat-custom-logo';
    }

    // If hide-top-paging option is enabled
    if ( Skizzar_Admin_Theme_Options::get_saved_network_option( 'hide-top-paging' ) ) {
        $new_classes[] = 'sat-hide-top-paging';
    }

    // If hide-post-search option is enabled
    if ( Skizzar_Admin_Theme_Options::get_saved_network_option( 'hide-post-search' ) ) {
        $new_classes[] = 'sat-hide-post-search';
    }

    // If hide-top-bulk option is enabled
    if ( Skizzar_Admin_Theme_Options::get_saved_network_option( 'hide-top-bulk' ) ) {
        $new_classes[] = 'sat-hide-top-bulk';
    }

    // If hide-user-role-changer
    if ( Skizzar_Admin_Theme_Options::get_saved_network_option( 'hide-user-role-changer' ) ) {
        $new_classes[] = 'sat-hide-user-role-changer';
    }

    // If hide-view-switch option is enabled
    if ( Skizzar_Admin_Theme_Options::get_saved_network_option( 'hide-view-switch' ) ) {
        $new_classes[] = 'sat-hide-view-switch';
    }

    // If hide-media-bulk-select option is enabled
    if ( Skizzar_Admin_Theme_Options::get_saved_network_option( 'hide-media-bulk-select' ) ) {
        $new_classes[] = 'sat-hide-media-bulk-select';
    }

    // If hide-comment-type-filter option is enabled
    if ( Skizzar_Admin_Theme_Options::get_saved_network_option( 'hide-comment-type-filter' ) ) {
        $new_classes[] = 'sat-hide-comment-type-filter';
    }

    // If enable-notification-center option is enabled
    if ( Skizzar_Admin_Theme_Options::get_saved_network_option( 'enable-notification-center' ) ) {
        $new_classes[] = 'sat-notification-center';
    }

    // Merge & return
    if ( is_array( $body_classes ) ) {
        return array_merge( $body_classes, $new_classes );
    }
    return $body_classes . ' ' . implode( ' ', $new_classes ) . ' ';

}

Dans mon fichier de plugin principal, je l’appelle à 3 endroits en utilisant les filtres suivants:

add_filter( 'body_class', array( 'Skizzar_Admin_Theme_Setup', 'filter_add_body_classes' ) );
add_filter( 'admin_body_class', array( 'Skizzar_Admin_Theme_Setup', 'filter_add_body_classes' ));
add_filter( 'login_body_class', array( 'Skizzar_Admin_Theme_Setup', 'filter_add_body_classes' ) );

Cela devrait ajouter des classes au corps en fonction des options choisies par les utilisateurs pour leur plugin. Les classes doivent être ajoutées au corps de l'administrateur , au site et au page de connexion . Cependant, pour le moment, cela ne fait qu'ajouter au site - donc, admin_body_class et login_body_class ne font essentiellement rien.

Quelqu'un peut-il m'aider à résoudre ce problème - ne pas avoir d'erreurs, mais ne rien faire

1
Sam Skirrow

A propos de votre problème dans classe de corps d'administrateur , WP documentation Codex admin_body_class , class En tant que chaîne (pas de tableau), certaines de vos fonctions, comme get_saved_network_option, ne retournent pas true, car $new_classes n'est pas défini dans array.

Ce code correct, nous avons besoin de retourner dans la chaîne, mais $new_classes peut-être dans la chaîne vide ou non tableau.

return $body_classes . ' ' . implode( ' ', $new_classes ) . ' ';

Pour la classe de page de connexion , vous avez le droit de définir login_body_class dans un tableau, MAIS vous avez défini la condition trop tôt. comme commentaire de @Bruno Cantuaria, regardez votre code:

// Only when logged in
if ( ! is_user_logged_in() ) {
    return $body_classes;
}

C’est pourquoi les paramètres de classe ne sont pas renvoyés, cela ne fonctionne que si l’utilisateur n’est pas connecté. J'espère que ça aide.

2
Jevuska