web-dev-qa-db-fra.com

Définir l'option d'écran par défaut pour l'apparence -> menus

Est-il possible d'avoir un contrôle sur les options de l'écran pour Appearance>Menus. Je travaille sur un thème et avec une nouvelle installation de Wordpress où je n’avais jamais touché à aucune des options de l’écran (du moins pas sous Apparence> Menus de toute façon). J'ai eu 3 types de messages personnalisés. L'un d'entre eux était "manquant". J'ai enquêté sur Screen Options et il s'est avéré que l'une d'elles était décochée, alors que les deux autres étaient cochées. Je ne sais pas ce que j'ai fait pour l'obtenir de cette façon, mais j'aimerais qu'il soit cohérent pour les utilisateurs de toute façon. Quelqu'un a-t-il des idées ou des informations sur ce sujet? Idéalement, j'aimerais savoir que les trois types de publication personnalisés seront vérifiés lors d'une nouvelle installation ou d'un nouvel utilisateur.

1
byronyasgur

Cette option est stockée dans la table wp_usermeta avec le nom meta_key de metaboxhidden_nav-menus.

Si on cache toutes les cases, c'est le meta_value de l'option:

array(
    "nav-menu-theme-locations", 
    "add-custom-links", 
    "add-post", 
    "add-page", 
    "add-portfolio", 
    "add-category", 
    "add-post_tag", 
    "add-post_format", 
    "add-location"
)

Il y a un CPT, portfolio. Si nous voulions qu'il soit toujours visible à chaque fois que l'utilisateur visite la page (/wp-admin/nav-menus.php), ce code le ferait:

add_filter( 'get_user_option_metaboxhidden_nav-menus', 'cpt_always_visible_wpse_87882', 10, 3 );

function cpt_always_visible_wpse_87882( $result, $option, $user )
{ 
    if( in_array( 'add-portfolio', $result ) )
        $result = array_diff( $result, array( 'add-portfolio' ) );

    //$show_boxes = array( 'cpt1', 'cpt2', 'cpt3' );
    //if( in_array( $show_boxes, $result ) )
    //  $result = array_diff( $result, $show_boxes );

    return $result;
}

Mais cela force le CPT à être visible même si l'utilisateur décoche l'option Screen. Lors de la prochaine visite sur la page, la boîte sera à nouveau visible.

Pour le faire une fois après l'enregistrement de l'utilisateur, le crochet d'action user_register doit être utilisé avec la fonction update_user_meta .

Pour le faire sur une nouvelle installation, un personnalisé install.php peut être utilisé. Peut-être qu'une autre technique est disponible, mais vous n'en êtes pas sûr ...

3
brasofilo