web-dev-qa-db-ja.com

カスタムメタボックスを自動的に閉じる(非表示にする)/デフォルト状態に設定する

私はWordPress関数 add_meta_box() を使って自分のカスタムメタボックスを追加しています。

では、ページを開いたときに自動的に閉じる/隠すにはどうすればよいですか。

現在、私はCSSクラスclosedをjQueryを介してmetaboxの<div>要素に追加しています。

HTML: (例)

<div id="my_metabox" class="postbox"></div>

jQuery:

$("#my_metabox.postbox").addClass("closed");

しかし、これを行うためのWordPress機能はありますか?

4
l2aelba

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;
}
5
Ralf912

メタボックスのオープン/クローズ状態の切り替えはWPによってJS経由でも行われます - クライアント側ではブラウザで行われるため、明らかにそうです。

これを行うスクリプトは、ハンドル'postbox' * によって行われます。

そのスクリプトは手動で行うのと同じことを行います(メタボックスを閉じるためにclosedクラスを追加します)。また、if(e.hasClass("closed"))を介してメタボックスの状態をチェックします。
したがって、デフォルトの状態を設定する方法はまったく問題ありません。

* 余談として:つまり、カスタム管理ページでこの機能が必要になった場合は、エンキューする必要があります(wp_enqueue_scripts( 'postbox' );

2
Johannes Pille