我试图在过滤器中传递变量。这对我来说非常有效。
class my_class {
function my_class() {
add_filter(\'wp_list_categories\', array(&$this,\'cat_count_span\'));
}
function cat_count_span($links) {
$links = str_replace(\'</a> (\', \'</a> <span>\', $links);
$links = str_replace(\')\', \'</span>\', $links);
return $links;
}
}
new my_class();
但现在我想根据主题选项值执行过滤器。假设我有我的主题选项值
$search = ot_get_option(\'search_header\');
基于这个值,我想添加过滤器并控制输出。像这样
class my_class {
function my_class() {
add_filter(\'wp_list_categories\', array(&$this,\'cat_count_span\'));
}
function cat_count_span($links) {
$search = ot_get_option(\'search_header\');
if ($search === \'on\') {
$links = str_replace(\'</a> (\', \'</a> <span>\', $links);
$links = str_replace(\')\', \'</span>\', $links);
return $links;
}
}
}
new my_class();
最合适的回答,由SO网友:Pieter Goosen 整理而成
我不太清楚为什么要这样做是一个类,因为您可以在这里简单地使用意大利面过滤器函数。
如果你真的需要在课堂上这样做,你的课堂上有几个问题
我们正朝着PHP 7发展,WordPress最终也觉醒了,现在它的类也朝着PHP 7发展。PHP 4类型构造函数随恐龙一起消亡,不应使用。Never ever 尝试支持使用EOL\'ed PHP版本的用户。不要牺牲性能和安全性来支持EOL\'ed版本。注意,PHP 4类型构造函数在PHP 7中折旧
Warning
PHP 7.0中不推荐使用旧式构造函数,并将在将来的版本中删除。在新代码中应始终使用\\uu construct()。
构造函数应该进行类初始化,而不应该执行任务。您不应该使用构造函数来添加筛选器或操作。把它移到你的课外
最好命名公共方法public function function_name()
, 而且不仅仅是function function_name()
一般来说,过滤器应该总是返回一些东西。您的筛选器失败,因为如果您的条件失败,您的筛选器没有回退,因为它不返回任何内容
类方法
您可以将类重写为以下内容:(NOTE: 因为我们顺利通过了PHP5。3、善用namespacing when constructing classes. 关于这个主题,有很多很好的教程class MyClass
{
/**
* Class instance.
*
* @see get_instance()
* @type object
*/
protected static $instance = NULL;
// Access the working instance of the class
public static function get_instance()
{
NULL === self::$instance and self::$instance = new self;
return self::$instance;
}
// Use the __construct() method for constructors
public function __construct()
{
// Add initialization here. Do not add add_filter/add_action here
}
public function CatCountSpan( $links )
{
$search = ot_get_option(\'search_header\');
if ($search === \'on\') {
$links = str_replace(\'</a> (\', \'</a> <span>\', $links);
$links = str_replace(\')\', \'</span>\', $links);
}
// Move the return statement outside the condition
return $links;
}
} // end of class
然后,您可以在类外添加筛选器,如下所示add_filter(
\'wp_list_categories\',
[MyClass::get_instance(), \'CatCountSpan\']
);
现场资源丰富add_action reference a class
Where is the best place to use add_filter
使用闭包的普通意大利面条正如我所说,我真的没有看到类在这里的用处,我可能只会使用普通的过滤函数
add_filter( \'wp_list_categories\', function ( $links )
{
$search = ot_get_option(\'search_header\');
if ($search === \'on\') {
$links = str_replace(\'</a> (\', \'</a> <span>\', $links);
$links = str_replace(\')\', \'</span>\', $links);
}
// Move the return statement outside the condition
return $links;
});