Wordpress过滤器未添加

时间:2013-10-09 16:44:44

标签: php plugins wordpress-plugin wordpress

我有一个使用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。正如我在评论中提到的,我知道这是在运行和工作,因为我可以在此插件文件中添加其他字段,但不能使用过滤器,因为过滤器没有添加。

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

1 个答案:

答案 0 :(得分:5)

根据order WordPress' core loads,在加载并执行所有插件后调用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');