web-dev-qa-db-fra.com

Rendre les métaboxes personnalisés réduits par défaut

J'ai créé des métaboxes personnalisés pour mon écran de post-écriture. Est-il possible de faire en sorte que certains d'entre eux s'affichent par défaut?

Juste au cas où je n'utiliserais pas les termes corrects ou que je ne serais pas clair dans ma question, je vais élaborer:

Les métaboxes sur l'écran de post-écriture ont un commutateur à bascule dans le coin supérieur droit de la boîte. Si vous passez la souris sur cette zone, elle affiche une petite flèche orientée vers le bas et les mots "Cliquez pour basculer". Lorsque vous cliquez dessus, la métabox s'effondre, masquant le contenu et affichant uniquement la barre de titre de la métabox. Je ne parle pas des options d’écran qui font disparaître les métaboxes entiers (uniquement sur le compte donné). Je souhaite simplement que certaines métaboxes s'affichent en mode réduit par défaut pour tous les utilisateurs WP.

METTRE À JOUR:

Après avoir lu dans la réponse de Hakre que l'état de bascule est stocké pour l'utilisateur, je voulais ajouter quelques précisions sur la manière dont je souhaite que cela fonctionne. Je ne sais pas si cela est possible, mais j'aimerais que les métaboxes par défaut soient réduites lorsque la publication est nouvelle, puis, à mesure que l'utilisateur les développe, il doit les développer. Toutefois, je souhaite que ces paramètres restent locaux pour chaque publication. Ainsi, lorsqu'ils créent une nouvelle publication, tous les métaboxes sont réduits.

7
matt

Pour afficher une métabox réduite ou fermée par défaut, il est bon de savoir que l'ajout de closed à l'attribut de sa classe l'affichera comme étant fermé. Toutes les divisions principales des méta-boîtes qui ont closed dans leur nom de classe sont affichées dans le formulaire fermé.

Lorsque la flèche est cliquée, elle sera supprimée ou ajoutée (basculée). Cela se fait de manière interactive sur la page de l'éditeur de publication. Ajouter manuellement le nom de la classe closed ne fonctionne que si vous le faites dans votre navigateur avec un outil de développement tel que firebug ou similaire.

Comme Wordpress suit normalement l'état de l'état de basculement de chaque métabox, vous devez veiller à ne définir initialement que l'état de basculement pour qu'il se ferme la première fois qu'un utilisateur spécifique visite l'éditeur ou est ajouté à d'autres utilisateurs.

Les données qui sont fermées de ces métaboxes sont stockées dans les options de l'utilisateur. Chaque fois que vous basculez dans une boîte, une requête ajax l'enregistre:

update_user_option($user->ID, "closedpostboxes_$page", $closed, true);

$closed est une liste séparée par des virgules de tous les identifiants de métaboxes fermés. $page est défini sur "post" pour l'éditeur de publication (celui que vous avez demandé). Ainsi, lorsqu'un nouvel utilisateur est créé (ou que le plug-in est installé pour tous les utilisateurs existants), vous pouvez étendre ce paramètre avec l'ID de votre metabox. Cela devrait faire le travail.

La seule chose que vous devez savoir est l’identifiant de votre metabox, mais je suis sûr que vous le connaissez déjà. Sinon, vérifiez votre code à l'endroit où vous enregistrez la metabox.

De plus, à côté de ceux qui sont fermés, vous pouvez également définir ceux qui sont cachés, ce qui correspondrait aux cases à cocher. C'est l'option hiddenpostboxes_$page alors.

Mettre à jour

Un peu de code sur la façon d'ajouter l'option:

function collapseBoxForUser($userId, $page, $boxId) {
    $optionName = "closedpostboxes_$page";
    $close = get_user_option($optionName, $userId);
    $closeIds = explode(',', $close);
    $closeIds[] = $boxId;
    $closeIds = array_unique($clodeIds); // remove duplicate Ids
    $close = implode(',', $closeIds);
    update_user_option($userId, $optionName, $close);
}

il suffit d'appeler cette fonction avec les valeurs appropriées et cela insérera votre boxId dans la valeur. La prochaine fois que l’éditeur charge cette valeur pour l’écran (par exemple via une requête ajax), il doit afficher la boîte fermée.

7
hakre

Une autre façon de faire est d'utiliser le hook dans get_user_option:

function closed_meta_boxes( $closed ) {
    if ( false === $closed )
        $closed = array( 'submitdiv', 'postcustom', 'anothermetaboxid' );

    return $closed;
}
add_filter( 'get_user_option_closedpostboxes_{post_type_slug}', 'closed_meta_boxes' );
6
sorich87

Vous pouvez accrocher le crochet d’enregistrement de l’utilisateur et appliquer les modifications de l’état de la boîte aux lettres; il s’exécutera alors chaque fois qu’un nouvel utilisateur est créé.

add_action( 'user_register', 'set_user_closedboxes' );
function set_user_closedboxes( $uid ) {
    update_user_meta( $uid, 'closedpostboxes_{type}',array('submitdiv','postcustom'));
}

{type} devrait être votre type de publication applicable, et le tableau devrait contenir les identifiants des boîtes à masquer (submitdiv et postcustom étant deux exemples).

Vous devrez écrire une requête si vous souhaitez mettre à jour des utilisateurs existants, mais la procédure ci-dessus devrait couvrir les utilisateurs nouvellement créés/enregistrés.

Le code n'a pas été testé, mais je ne vois aucune raison pour laquelle cela ne fonctionnerait pas, signalez tout problème éventuel.

J'espère que cela pourra aider..

1
t31os