作为练习,我正在使用PHPclass to add meta boxes 我在GitHub上找到了。我只是复制了代码,现在我正在玩它来理解它。
其工作原理如下:包含该类的文件包含在init中。在该文件内部,但在类外部,有一个空数组$meta_boxes
已初始化
之后,使用apply_filters
. 我猜是apply_filters
使用而不是do_action
因为后者不返回任何内容——$meta_boxes = apply_filters( \'cmb_meta_boxes\', $meta_boxes )
.
在该操作中,将挂接一个函数,该函数将添加到现有数组中,并在末尾返回该数组。
该函数获取$meta_boxes
作为参数传递。
TLDR
将创建一个空数组,并启动一个向该数组添加并返回该数组的函数。函数激发是因为它连接到一个自定义挂钩,该挂钩使用apply_filters
, 因为这样可以将函数的返回值分配给变量。
对我来说,对于一件非常简单的事情来说,这似乎真的是一项非常复杂的任务。这是做事情的“WordPress方式”,还是可以用更少的代码实现同样的结果?
为什么连接到自定义筛选器/操作的函数需要将数组作为参数。它不是因为被添加到挂钩中而自动传递给该函数吗?
也许我还没有完全理解WordPress中处理变量的方式。如果你认为是这样的话,任何与解释相关的链接都会被欣然接受。
SO网友:DrewAPicture
从头开始创建元框的基本前提是首先注册一个元框,它调用一个显示回调,然后在其中创建和输出字段。当然,您还需要自己处理数据的清理、保存和显示。
您使用的类并不是真正的“WordPress方式”,而是一个框架,它可以使创建元框和清理各种类型的字段更加容易。
如果您有兴趣学习如何“从头开始”,下面是一个添加新元框的非常简单的示例:
/**
* Register meta box(es).
*/
function wpdocs_register_meta_boxes() {
add_meta_box( \'meta-box-id\', __( \'My Meta Box\', \'textdomain\' ), \'wpdocs_my_display_callback\', \'post\' );
}
add_action( \'add_meta_boxes\', \'wpdocs_register_meta_boxes\' );
/**
* Meta box display callback.
*
* @param WP_Post $post Current post object.
*/
function wpdocs_my_display_callback( $post ) {
// Display code/markup goes here. Don\'t forget to include nonces!
}
/**
* Save meta box content.
*
* @param int $post_id Post ID
*/
function wpdocs_save_meta_box( $post_id ) {
// Save logic goes here. Don\'t forget to include nonce checks!
}
add_action( \'save_post\', \'wpdocs_save_meta_box\' );
当然,关于
add_meta_box() page 在代码参考中。