我正在构建一个自定义主题,我想创建一个助手类来处理管理面板中元盒的创建。我的类声明如下:
namespace ci\\wp;
Metaboxes::init();
class Metaboxes {
private static $instance;
private static $post;
private static $metaboxesPath = TEMPLATEPATH . "/config/metaboxes/";
static function init() {
global $post;
self::$post = &$post;
add_action( \'add_meta_boxes\', [ __CLASS__, \'addMetabox\' ], 10, 5 );
}
// ADD METABOX
static function addMetabox($id, $title, $post_type, $position, $priority) {
if (file_exists(self::$metaboxesPath.$id.\'.php\')) {
require_once(self::$metaboxesPath.$id.\'.php\');
add_meta_box($id, $title, \'do_\'.$id, $post_type, $position, $priority);
}
}
[...]
问题是,当我想使用addMetabox方法时,通过编写
\\ci\\wp\\Metaboxes::addMetabox(\'front_page_slide_settings\', \'Slide settings\', \'page\', \'normal\', \'high\');
我得到以下错误:
Fatal error: Uncaught Error: Call to undefined function ci\\wp\\add_meta_box() in [...]
我尝试了几种在类中使用add\\u操作的不同方法,但无论是静态类、实例化时运行add\\u操作的单例类还是构造函数中运行add\\u操作的普通类,都会导致上述错误。
有没有办法让它发挥作用?我做错了什么?
SO网友:birgire
你实际上是在打电话给add_meta_box()
函数定义之前,直接运行时:
\\ci\\wp\\Metaboxes::addMetabox(
\'front_page_slide_settings\',
\'Slide settings\',
\'page\',
\'normal\',
\'high\'
);
你没有提到你在哪里运行它,但太早了,或者你在前端运行它,在哪里
add_meta_box()
未定义。
这个add_meta_box()
函数在此文件中定义:
/** WordPress Template Administration API */
require_once(ABSPATH . \'wp-admin/includes/template.php\');
确保在之后运行有问题的代码段,例如在
add_meta_boxes
行动,就像你在
Metaboxes::init()
呼叫
核心init
例如,操作在加载模板管理API之前激发。