私はWordPress関数 add_meta_box()
を使って自分のカスタムメタボックスを追加しています。
では、ページを開いたときに自動的に閉じる/隠すにはどうすればよいですか。
現在、私はCSSクラスclosed
をjQueryを介してmetaboxの<div>
要素に追加しています。
HTML: (例)
<div id="my_metabox" class="postbox"></div>
jQuery:
$("#my_metabox.postbox").addClass("closed");
しかし、これを行うためのWordPress機能はありますか?
postbox_classes
にフックします。 postbox_classes
はメタボックスのクラスを出力する関数です。
apply_filters( "postbox_classes_{$page}_{$id}", $classes )
あなたのコードは次のようになります。
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;
}
メタボックスのオープン/クローズ状態の切り替えはWPによってJS経由でも行われます - クライアント側ではブラウザで行われるため、明らかにそうです。
これを行うスクリプトは、ハンドル'postbox'
* によって行われます。
そのスクリプトは手動で行うのと同じことを行います(メタボックスを閉じるためにclosed
クラスを追加します)。また、if(e.hasClass("closed"))
を介してメタボックスの状態をチェックします。
したがって、デフォルトの状態を設定する方法はまったく問題ありません。
* 余談として:つまり、カスタム管理ページでこの機能が必要になった場合は、エンキューする必要があります(wp_enqueue_scripts( 'postbox' );
)