Comment changer la position par défaut des méta-boîtes WP?

Réponses:

22

Vous pouvez supprimer les métadonnées par défaut avec remove_meta_box et les rajouter dans une position différente avec add_meta_box:

add_action('do_meta_boxes', 'wpse33063_move_meta_box');

function wpse33063_move_meta_box(){
    remove_meta_box( 'postimagediv', 'post', 'side' );
    add_meta_box('postimagediv', __('Featured Image'), 'post_thumbnail_meta_box', 'post', 'normal', 'high');
}

Cela le supprimera de la colonne latérale et l'ajoutera à la colonne principale. remplacez postdans cet exemple le nom de votre type de publication personnalisé.

Milo
la source
Cela semble idéal, merci encore Milo, je vais essayer.
Mr.Brown
@Milo: Comme si le add_meta_box()besoin d'un $callbacknom de fonction, comment se fait-il que je connaisse le nom de la fonction utilisée par WordPress? Supposons que je veuille faire la même chose dans la barre latérale meta_box 'Catégories' (#categorydiv)?
Mayeenul Islam
5
@MayeenulIslam regardez dans le fichier /wp-admin/edit-form-advanced.phpet vous verrez où WordPress ajoute toutes les métadonnées de base et les rappels et arguments qu'il utilise. pour les catégories c'est le cas post_categories_meta_box.
Milo
5

J'ai aussi eu du mal avec ça. Je n'ai pas vraiment trouvé de moyen propre de redéfinir la mise en page / l'ordre - d'autant plus qu'il peut être modifié par les utilisateurs quand / s'ils font glisser les cases.

J'aime faire les choses 'avec' wordpress (ça rapporte généralement), rathe que de m'y heurter et la façon dont wordpress le fait est la suivante:

wordpress stocke les positions glissées par utilisateur et par écran et il existe tout un tas de clés de méta utilisateur qu'il utilise en fonction de la page / de l'écran sur lequel il se trouve.

Vous pouvez donc ajouter une action ou un filtre pour chaque nouvel utilisateur afin de définir le paramètre utilisateur comme vous le souhaitez par défaut.
1) Faites glisser et organisez la page que vous souhaitez affecter, puis 2) regardez dans phpmyadmin votre méta utilisateur pour votre identifiant et voyez ce que wp y a stocké. 3) puis codez la nouvelle action utilisateur comme suit si un utilisateur n'a PAS ce paramètre déjà défini (pour éviter d'écraser un choix personnel), vous pouvez le définir comme vous le souhaitez - avec la valeur que vous avez trouvée en le définissant manuellement.

Pour avoir une idée des méta-méta utilisateur que vous recherchez, consultez ces captures d'écran: http://wpusersplugin.com/related-plugins/amr-user-templates/screenshots-for-user-templates/

(J'ai fini par écrire un plugin générique afin que je puisse en tant qu'administrateur définir ma mise en page préférée pour tous les utilisateurs pour toutes sortes de pages / écrans. Ensuite, ils pourraient modifier cela, par exemple à mesure qu'ils devenaient plus compétents. les choses que le plugin me récupère simplement les valeurs utilisateur du modèle, il n'essaye même pas de définir la valeur à une valeur codée en dur.)

anmari
la source
1
Bien que j'aime l'idée derrière cette approche, la solution de Milo semble beaucoup plus rapide, donc je vais plutôt essayer, mais merci d'avoir pris le temps de m'informer sur cette approche également. Je vais certainement envisager d'utiliser cette méthode à une date ultérieure. J'ai noté votre commentaire.
Mr.Brown
3
Le plugin proposé par Anmari est un plugin commercial payant ... et ne semble pas mis à jour depuis août de l'année dernière. Maintenez-vous toujours ce plugin? Sinon, avez-vous envisagé de le partager sur Github?
unfulvio
Merci @anmari d'avoir partagé cette approche, vraiment utile.
Maor Barazany
0

Si vous souhaitez commander précisément vos meta box, vous pouvez utiliser ce plugin: https://wordpress.org/plugins/post-meta-box-order/

Il joue sur la meta-box-order_post de l'option utilisateur (table wp_usermeta).

Remarque 1: cette technique peut être appliquée à n'importe quel CPT personnalisé en modifiant la fin du drapeau: meta-box-order_ [YOUR_CPT]

Note 2: n'oubliez pas de changer le hachage dans le code du plugin pour appliquer votre nouvelle commande à tous les utilisateurs existants.

rebe100x
la source