我试图通过一个类为自定义帖子类型添加几个元框。我正在使用"register_meta_box_cb" 参数,以指定用于添加元框的回调函数。
示例代码-(我的代码大纲)-
class ABC
{
public static function add_customposttype()
{
$abc_o = new ABC();
$abc_o->reg();
}
public function reg()
{
$args = array(
"label" => "ABC",
"description" => "New CPT",
"public" => true,
"register_meta_box_cb" => array($this, "meta_box_callback")
);
register_post_type("abc", $args);
}
public function meta_box_callback()
{
$meta_fields = get_all_meta_fields(); // This gets me an array of objects of classes \'c_box, b_box and a_box\'
foreach($meta_fields as $object)
{
add_meta_box($object->name, $object->label, array($object, \'render_meta_box\'), \'abc\', $object->context, $object->priority);
}
}
}
class c_box
{
public $name;
public $label;
public $context;
public $priority;
public function __construct()
{
$this->name = \'c_box\';
$this->label = \'C Box\';
$this->context = \'normal\';
$this->priority = \'high\';
}
public function render_meta_box($post)
{
echo "<p>This is a C Box</p>"; // Never executes
}
}
class b_box
{
public $name;
public $label;
public $context;
public $priority;
public function __construct()
{
$this->name = \'b_box\';
$this->label = \'B Box\';
$this->context = \'normal\';
$this->priority = \'high\';
}
public function render_meta_box($post)
{
echo "<p>This is a B Box</p>"; // Never executes
}
}
class a_box
{
public $name;
public $label;
public $context;
public $priority;
public function __construct()
{
$this->name = \'a_box\';
$this->label = \'A Box\';
$this->context = \'normal\';
$this->priority = \'high\';
}
public function render_meta_box($post)
{
echo "<p>This is a A Box</p>"; // Never executes
}
}
所以我为不同的元框定义了不同的类。我希望他们都有一个共同点
render_meta_box 函数,这样我就可以创建所有这些类的对象,将它们放在一个数组中并遍历它,这样我就可以调用
render_meta_box 一个接一个地为它们所有的函数。
基本上,元框将有自己的类,其中render_meta_box 函数和其他一些函数,我可以为这些类中的每一个创建一个对象,并逐个运行它们的函数,这样以后就可以很容易地添加新的元框。
我面临的问题是,当我定义render_meta_box 方法在单独的类中,其中包含要回显的HTML代码,如下所示add_meta_box 从不执行该回调函数。我试着看看能不能让它在render_meta_box 方法,但它从未到达该打印语句。
我错过什么了吗?我想我可以打电话给render_meta_box 方法使用不同的对象使它们都以不同的方式执行,我的方法是否不正确?
提前感谢!
SO网友:Justin Waulters
欢迎光临!
拥有更完整的代码并显示如何调用这些方法会很有帮助。然而,我看到的一件事可能是你的问题的一部分,那就是你打电话的方式add_meta_box().
add_meta_box() 应在add_meta_boxes 行动我从未尝试过将其作为register_post_type() 之前但是,假设你正在跑步register_post_type() 在期间init, 我想add_meta_box() 将在init 太-功能可用之前。
如果WP实际尝试运行add_meta_box() 在它可用之前,您应该能够看到Fatal Error 在PHP日志中,因为调用了未定义的函数。
要进行故障排除,我首先确认register_meta_box_cb 只需让它调用一个函数die; 或者将某物写入文件。
确认其正常工作后,可以尝试使用register_meta_box_cb 调用将向添加操作的函数add_meta_boxes. 有回拨权add_meta_boxes 操作运行您的add_meta_box() 环
如果这不起作用或者你需要更多的帮助,请告诉我!