匿名筛选器和操作可以通过以下方式在本机删除:
remove_filter( $tag, function(){}, $priority )
使用生成唯一id时
spl_object_hash()
, 匿名函数可以相互比较,因此不需要再次重新创建完全闭包对象。
如果多个筛选器或操作连接到具有相同优先级的同一标记,则它将删除添加的最新筛选器或操作。如果需要保留一个过滤器,则必须删除所有过滤器,直到需要删除的过滤器为止,然后根据需要重新添加其他过滤器。
// Filter which was added and needs to be removed
add_filter( \'manage_edit-comments_columns\', function( $default ) {
$columns[\'smr_comment_rate\'] = __( \'Rate\', \'txtdmn\' );
return array_slice( $default, 0, 3, true ) + $columns + array_slice( $default, 2, NULL, true );
} );
// Removes the last anonymous filter to be added
remove_filter( \'manage_edit-comments_columns\', function(){} );
这通常会回到最佳实践。我只会将匿名函数用作我为客户机开发的自定义主题的一部分,我不希望覆盖或删除过滤器。在我开发的任何公共主题或插件中,我都会使用工厂初始化一个类,添加所有过滤器和操作,然后将实例存储为静态变量。
EDIT
remove_filter
使用匿名函数似乎不适用于最新版本的WordPress和PHP。功能
_wp_filter_build_unique_id
自WordPress 5.3.0以来进行了更新,并删除了一些“spl\\u object\\u hash”解决方法,从而防止以这种方式删除过滤器。
我现在看到的删除过滤器的唯一方法是手动调整$wp_filter
全局变量。
global $wp_filter;
unset( $wp_filter[ $tag ]->callbacks[ $priority ][ $identifier ] );
// or
foreach ( $wp_filter[ $tag ]->callbacks[ $priority ] as $identifier => $callback ) {
// Match identifier as necessary
}
// or
array_pop( $wp_filter[ $tag ]->callbacks[ $priority ] );