添加到数组并通过do_action/Apply_Filters传递它

时间:2014-09-07 作者:Sven

作为练习,我正在使用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中处理变量的方式。如果你认为是这样的话,任何与解释相关的链接都会被欣然接受。

1 个回复
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 在代码参考中。

结束

相关推荐

从屏幕隐藏Metabox选项下拉菜单

我创建了一个自定义帖子类型(CPT),它有两个元数据库。在CPT的编辑页面上,屏幕选项下拉(顶部)显示元框,并向用户提供option 要“在屏幕上显示”。。。或not “在屏幕上显示”。由于这些字段对于CPT是必需的,我想在“屏幕选项”下拉列表中完全隐藏我的元数据库。我该怎么做?