MetaBox正文未显示(回调函数)

时间:2019-08-20 作者:LordSylar

我们正在创建一个插件,例如,它在所有帖子类型上显示一个元框。首先,我使用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\'), 一切正常。

如何从类中的插件呈现元数据库的内容?谢谢

1 个回复
最合适的回答,由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
    }
}
查看PHPmanual 有关使用/提供可调用/回调的详细信息&mdash;在您的情况下,我们使用对象方法调用(请参见/查找// Type 3: Object method call 在手册上)。