我们正在创建一个插件,例如,它在所有帖子类型上显示一个元框。首先,我使用Starter Kit.
<?php
namespace PLUGIN_NAME;
class Foo
{
public function __construct() {
add_action( \'admin_init\', [ $this, \'wpd_add_meta_box\' ] );
}
function wpd_add_meta_box() {
$screens = get_post_types();
foreach ( $screens as $screen ) {
add_meta_box(
\'global-notice\',
__( \'Global Box \', \'global-box\' ),
\'global_box_meta_box_callback\',
$screen,
\'advanced\',
\'high\'
);
}
}
function global_box_meta_box_callback( $post ) {
echo "We\'re alive!"; // Never shows inside the metabox that is rendered.
}
}
在post页面上,我看到了metabox,但没有回调函数。
将代码移动到functions.php
, 使用add_action( \'admin_init\',\'wpd_add_meta_box\')
, 一切正常。
如何从类中的插件呈现元数据库的内容?谢谢
最合适的回答,由SO网友:Sally CJ 整理而成
那个global_box_meta_box_callback()
是类方法(即类中的函数),而不是全局定义的函数,因此需要使用[ $this, \'global_box_meta_box_callback\' ]
(或array( $this, \'global_box_meta_box_callback\' )
) 将类方法提供给add_meta_box()
:
class Foo
{
...
function wpd_add_meta_box() {
$screens = get_post_types();
foreach ( $screens as $screen ) {
add_meta_box(
\'global-notice\',
__( \'Global Box \', \'global-box\' ),
[ $this, \'global_box_meta_box_callback\' ], // correct
// \'global_box_meta_box_callback\', // incorrect
$screen,
\'advanced\',
\'high\'
);
}
}
function global_box_meta_box_callback( $post ) {
// your code here
}
}
查看PHP
manual 有关使用/提供可调用/回调的详细信息&mdash;在您的情况下,我们使用对象方法调用(请参见/查找
// Type 3: Object method call
在手册上)。