2013-10-09 73 views
3

我有一个使用apply_filters这样的插件:WordPress的过滤掉不添加

$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_dumps,但我指出的add_filter函数永远不会被调用。

+0

尝试更改优先级? – codepixlabs

+0

0 - 1000,仍然不会运行。请注意,我没有尝试0到1000之间的每一个数字。 – tubaguy50035

+1

是那个插件目前在你的wordpress上有效吗? – codepixlabs

回答

4

根据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'); 
+0

我也在我的插件中使用'add_filter('attachment_fields_to_edit',array($ this,'addFields'),11,2);'。如果我调整它的运行时间,看起来好像这个过滤器永远不会被添加。 – tubaguy50035

+0

这是一个相关的问题?或者这是上述建议修复的结果? – mushroom

+0

建议修复的结果。 – tubaguy50035