将筛选器视为操作是否可以接受?

时间:2014-09-14 作者:henrywright

这个wp_insert_attachment_data 过滤器内部可用wp_insert_attachment(). 它允许在数据库中更新或添加附件帖子数据之前对其进行筛选。

$data = apply_filters( \'wp_insert_attachment_data\', $data, $object ); 
我不需要更改post数据,但我需要在执行过程中的这一点执行操作。是否可以将我的函数挂接到过滤器上,进行一些处理,然后返回未更改的$数据?我确实需要使用$数据,但不需要更改它。例如:

function my_function( $data, $object ) {

    // Do some stuff with $data here.

    // No changes made to $data. Just return it.
    return $data;
}
add_filter( \'wp_insert_attachment_data\', \'my_function\', 10, 2 );
虽然我相信这个解决方案会对我的目的起作用,但我觉得它有点“黑客”,与wp_insert_attachment_data 滤器过滤器的目的是修改某些变量。就我而言,我没有修改任何东西。

这是否可以接受,或者我应该在WordPress Trac上请求添加一个动作挂钩?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

所有操作实际上都是内部过滤器。

所以,是的,你可以在过滤器挂钩上做事情。然而,要注意哪些过滤器以及你在做什么。有些过滤器到处都在运行,对其进行昂贵的操作可能会导致速度大幅放缓。还要注意递归。如果你昂贵的操作触发了你所依赖的过滤器。。

结束

相关推荐

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

作为练习,我正在使用PHPclass to add meta boxes 我在GitHub上找到了。我只是复制了代码,现在我正在玩它来理解它。其工作原理如下:包含该类的文件包含在init中。在该文件内部,但在类外部,有一个空数组$meta_boxes 已初始化之后,使用apply_filters. 我猜是apply_filters 使用而不是do_action 因为后者不返回任何内容——$meta_boxes = apply_filters( \'cmb_meta_boxes\', $meta_boxes