J'utilise la fonction WordPress add_meta_box()
pour ajouter ma propre métabox personnalisée.
Alors, comment puis-je fermer/cacher automatiquement à la page ouverte?
Actuellement, je viens d'ajouter une classe CSS closed
à l'élément <div>
de metabox via jQuery comme ceci:
HTML: (exemple)
<div id="my_metabox" class="postbox"></div>
jQuery:
$("#my_metabox.postbox").addClass("closed");
Mais existe-t-il une fonction WordPress pour le faire?
Accrocher dans postbox_classes
. postbox_classes
est la fonction qui va générer les classes pour la metabox.
apply_filters( "postbox_classes_{$page}_{$id}", $classes )
Votre code pourrait ressembler à ceci:
add_action( 'add_meta_boxes', 'add_my_metabox' );
function add_my_metabox() {
$id = 'my-metabox';
$title = 'My Metabox';
$callback = 'my_metabox_content';
$page = 'post';
add_meta_box( $id, $title, $callback, $page );
add_filter( "postbox_classes_{$page}_{$id}", 'minify_my_metabox' );
}
function my_metabox_content() { ... }
/*
* $classes is an array
*/
function minify_my_metabox( $classes ) {
if ( isset( $_POST['my_condition'] ) && 'my_condition' == $_POST['my_condition'] ) {
array_Push( $classes, 'closed' );
}
return $classes;
}
Le basculement de l'état d'ouverture/fermeture d'une métaboxe se fait via JS par WP également - bien évidemment, puisque cela se produit côté client dans son navigateur.
Le script qui fait cela passe par le handle 'postbox'
*
Ce script fait la même chose que vous faites manuellement (ajoute une classe closed
pour fermer les métaboxes). En outre, il vérifie l'état d'une métabox via if(e.hasClass("closed"))
.
Par conséquent, votre manière de définir l'état par défaut est tout à fait correcte.
* En aparté: si vous avez besoin de cette fonctionnalité sur des pages d’administrateur personnalisées, c’est ce qui doit être mis en file d'attente (wp_enqueue_scripts( 'postbox' );
)