我正在小部件中为WordPress查询添加一个过滤器。我补充如下:
function filter_where( $where = \'\' ) {
}
add_filter( \'posts_where\', \'filter_where\' );
$query = new WP_Query( $args );
remove_filter( \'posts_where\', \'filter_where\' );
它工作得很好,但是如果我使用同一个小部件超过1次,那么我会得到一个致命错误,即无法重新声明相同的过滤器。如何使用过滤器,以便同一个小部件可以多次使用?
这正是我得到的错误:
Fatal error: Cannot redeclare filter_where() (previously declared in xxx.php:70)
谢谢。
SO网友:Eric Holmes
您的代码应该如下所示:
class my_Widget extends WP_Widget {
...
function filter_where( $where = \'\' ) {
...
}
function widget( $options ) {
...
add_filter( \'posts_where\', array( $this, \'filter_where\' ) );
$query = new WP_Query( $args );
remove_filter( \'posts_where\', array( $this, \'filter_where\' ) );
}
}
这将使函数保持在类中,在类级别访问它,并避免任何命名空间问题。