案例:
我得到了一组基于输入数组中的数据构建表单字段的类。该类可以构建以下类型的表单字段:
输入(基本、隐藏、密码)
文本区域收音机复选框
选择颜色选择器日期选择器文件上载编辑:类使用
wp_register_script/_style
&;
wp_enqueue_script/_style
加载脚本(&O);样式。包含动作的函数在类中钩住,如下所示:
add_action( \'admin_enqueue_scripts\', array( &$this, \'enqueue\' ) );
.
示例:
(内部functions.php
)// meta box callback function
function test_meta_box_cb()
{
$input_args = 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
不起作用。我渲染了表单字段,但没有脚本或样式。
问题的情况和回溯:
到目前为止,我可以将问题追溯到wordpress核心架构:
直到do_action(\'add_meta_boxes\', $post_type, $post)
调用了get(在edit form advanced.php中)
该调用发生在管理标头之后很久。调用了php(其中包含do_action(\'admin_enqueue_scripts\', $hook_suffix);
).因此,脚本;样式无法加载(如果我没有错的话)问题:
如何在调用元框表单字段之前加载样式如何避免重复相同的样式表?我想使用wp_enqueue_style
&;wp_register_style
?我愿意接受任何答案,包括那些迫使我重写课堂架构的人。注意:我需要在许多不同的szenarios中使用这个类,所以将它绑定到add_meta_box
功能不好。我即将创建一个抽象层来划分对元框和样式/脚本部分的调用,但为什么我要在核心函数之上添加另一层呢?
最合适的回答,由SO网友:Anh Tran 整理而成
您的问题是添加脚本、样式inside 类,因为类实例是在钩子add_meta_box
被解雇时wp_enqueue_script/style
已完成。
您的解决方案是添加脚本、样式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);
}
实际上,我写了一个
meta box class for WP, 这使用了另一种方法。我的类不是像您那样为表单字段编写表单类,而是元框的包装器。如果你感兴趣,值得一看。