web-dev-qa-db-ja.com

投稿タイプの追加/編集から特定の画面オプションとメタボックスを削除する方法?

今、あなたがあなたの希望する投稿タイプの中で特定の投稿を追加または編集するとき、同様にもっと多くのスクリーンオプションがあります。ただし、これらの画面オプションはメタボックスを表示/非表示にしています。私はプログラムでこれらの登録されているメタボックスのすべてのスクリーンオプションのリストを取得できるようにしたいと思っています。

WordPress - Screen Options - Add or Edit Post - Meta Boxes フルサイズのスクリーンショットはここをクリック

質問 希望の投稿タイプ内で特定の投稿を追加または編集したい、投稿タイプに関するすべての登録済み画面オプション(メタボックス)のリストをプログラムで取得する方法を教えてください。

最終的に、ここでの目標はこれらのオプションを削除することであり、単にそれらを無効にすることではありません。 不要なダッシュボードのメタボックスを削除する のために、私が達成したことに沿って何かをしたいと思っています。

10
Michael Ecklund

必要なのは、get_current_screen()->idによってインデックス化されたグローバル$wp_meta_boxesです。画面オプションを削除すると、'in_admin_header'フックを使用して画面オプションが表示される直前に実行できるメタボックスも削除されます。

このスクリーンショットに表示されている "Send Trackbacks"画面オプションを取り除きたいと仮定しましょう:

次のクラスをテーマのfunctions.phpファイルまたはビルドするプラグインにドロップすると、コードは "Send Trackbacks"画面オプション(それは関連するメタボックスであり、これもあなたが望んでいたものですよね?):

class Michael_Ecklunds_Admin_Customizer {
  function __construct() {
    add_action( 'in_admin_header', array( $this, 'in_admin_header' ) );
  }
  function in_admin_header() {
    global $wp_meta_boxes;
    unset( $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv'] );
  }
}
new Michael_Ecklunds_Admin_Customizer();

上記のコードをWordPress 3.4サイトに追加すると、次のようになります。

PhpStorm 内のZendデバッガーを使用すると、$wp_meta_boxes[get_current_screen()->id]の検査が行われるため、デフォルトのインストールの値を確認できます。 of WordPress 3.4がPost編集画面にあります(例で参照した配列インデックス、つまり$wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv']

うまくいけば、これがあなたが探していたものですか?

13
MikeSchinkel

すみません、それは少しサイドトラックですが、私はそれが箱メタボックスのうちのwpを削除することになると便利だと思いましたが、カスタムまたはカスタムテーマ関連メタボックスのためにそんなに多くはありません。もう少し詳しく説明すると、私はあなたが投稿/ページを新しくしたときはいつでもカスタムメタボックスを導入する新しいテーマをインストールした。それはスクリーンオプションに現れる。 (私はwpが初めてなので)Mikeのアプローチを使用したため、このカスタムメタボックスを削除することはできませんでしたが、カスタムではないすべてのものに対して機能しました。私の愚かさのために私は何時間も壁にぶつかり続けましたがそれでも理解することができなかったので、私はこれに戻らなければなりませんでした:

if (is_admin()) :
function my_remove_meta_boxes() 
{
  if(!current_user_can('administrator')) 
  {
    remove_meta_box('theme_custom_meta_box', 'post', 'side');
  }
}
add_action( 'add_meta_boxes', 'my_remove_meta_boxes' );
endif;
0
Yinnie