質問: array( 'type' => 'color' ,'id' => 'color-id' ,'label' => 'input colorpicker label' ,'opt_name' => 'abc_xyz' ,'value' => '009ee0' ); new formclass( $input_args, true ); } // add the meta box function add_test_meta_box() { add_meta_box( 'test_box', __('testbox'), 'test_meta_box_cb', 'post', 'advanced', 'high' ); } add_action( 'add_meta_boxes', 'add_test_meta_box' ); 問題:このように、私のwp_enqueue_scriptとwp_enqueue_styleの呼び出しは機能しません。フォームフィールドはレンダリングされますが、スクリプトやスタイルは表示されません。問題の状況とバックトレース:これまでのところ、問題をワードプレスのコアアーキテクチャまで突き止めることができました。 do_action('add_meta_boxes', $post_type, $post)が呼ばれるまで、wpはコールバック関数の中で何が起こるのか疑問に思いません(insideedit-form-advanced.php)。 その呼び出しはadmin-header.phpが呼び出された(do_action('admin_enqueue_scripts', $hook_suffix);を含む)ずっと後に行われます。 そのため、スクリプトとスタイルはロードできません(私が間違っていない場合)。 質問: メタボックスフォームフィールドが呼び出される前にどのようにスタイルを読み込むことができますか? どのように私は同じスタイルシートを何度も何度も繰り返すのを避けることができます - 私はwp_enqueue_styleとwp_register_styleを使いたいですか? 私は私のクラスアーキテクチャを書き直すことを私に強いる人を含むあらゆる答えに寛容です。注:このクラスをさまざまなシナリオで使用する必要があるため、add_meta_box関数と一緒に閉じるためにまとめるのはよくありません。私はメタボックスとスタイル/スクリプト部分の呼び出しを分割する抽象化レイヤを作ることに近いですが、なぜ私はコア関数の上に別のレイヤを追加したいのでしょうか?
回答: あなたの問題はスクリプト、styles inside を追加することです。そして、クラスインスタンスはフックadd_meta_boxが起動されたときに作成されるので、その時点ではwp_enqueue_script/styleは既に終了しています。あなたのための解決策は、スクリプト、styles outside 関数とクラスを追加することです。メタボックスはページの編集時にのみ使用されるので、次のようにすることができます。// the editing pages are actually post.php and post-new.php add_action('admin_print_styles-post.php', 'custom_js_css'); add_action('admin_print_styles-post-new.php', 'custom_js_css'); function custom_js_css() { wp_enqueue_style('your-meta-box', $base_url . '/meta-box.css'); wp_enqueue_script('your-meta-box', $base_url . '/meta-box.js', array('jquery'), null, true); } 実際、私は メタボックスクラスwp を作成しました。これは別のアプローチを使用します。あなたのようにフォームフィールドのフォームクラスを書く代わりに、私のクラスはメタボックスのラッパーです。で、それを見てみる価値があります。