5

我有一个这样使用的插件apply_filters

$additional_fields = apply_filters('attachment_meta_add_fields', $additional_fields);

在我的主题中functions.php,我这样做:

function addAttachmentMeta($additionalFields) {
    return $addtionalFields;
}
add_filter( 'attachment_meta_add_fields', 'addAttachmentMeta', 1, 1 );

但该功能addAttachmentMeta永远不会运行。

如何更改我的应用或添加过滤器语句以使其addAttachmentMeta被调用?

编辑:这是一个自定义插件,我根据有关如何添加附加附件元字段的教程编写。整个来源在这里: http: //pastebin.com/7NcjDsK5。正如我在评论中提到的,我知道它正在运行和工作,因为我可以在这个插件文件中添加其他字段,但不能通过使用过滤器,因为过滤器没有被添加。

我可以在语句之前和之后看到 var_dumps apply_filters,但是我指向的函数add_filter永远不会被调用。

4

1 回答 1

11

根据WordPress 核心加载的顺序,function.php 在所有插件加载并执行后被调用。

你需要确保apply_filters()你的插件在你add_filter()被调用之后运行。否则,在您的过滤器被“应用”时,add_filter()还没有被调用。

你可以做的是使用一个钩子让你的插件的那部分在functions.php加载之后运行。你可以用add_action('after_setup_theme', 'function_name')钩子。

将插件文件的最后三行包装在一个函数中,并在 functions.php 运行后执行它。

function addAttachmentMeta() {
    $additional_fields = array();
    $additional_fields = apply_filters('attachment_meta_add_fields', $additional_fields);
    $am = new Attachment_Meta( $additional_fields );
}
add_action('after_setup_theme', 'addAttachmentMeta');
于 2013-10-09T18:18:35.360 回答