我发现自己需要将自定义数据传递给第三方插件提供的过滤器。我见过的所有方法都非常复杂,很难缠住我的头。
举个例子:
$score = 42; //Some crazy calculation I don't want to repeat.
function add_score_to_title($title) {
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
如何将$score
变量传递给add_score_to_title()
?
我最终要做的是将变量添加到全局$wp
对象中。因此,您最终得到以下结果:
global $wp;
$score = 42; //Some crazy calculation I don't want to repeat.
$wp->some_random_name_for_score = $score;
function add_score_to_title($title) {
global $wp;
$score = $wp->some_random_name_for_score;
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
脏?也许。简单?对!这种技术有什么缺点吗?请讨论。
更新 这里是有问题的完整代码-> http://pastebin.com/fkSXY04m
只需在该函数中进行“疯狂的计算” ...
—
onetrickpony 2012年
从我的简化示例中可能很难理解。$ score变量在整个模板中使用。我只想计算一次,然后将该值传递给函数,该函数是用于更改页面标题的过滤器的回调。此过滤器用于“多合一SEO包”中。不需要多次运行计算。
—
kingkool68
然后,如果要获得不涉及引入全局状态(永远不需要)的解决方案,则应该发布更多代码。
—
onetrickpony 2012年
这是模板文件中的完整代码。
—
kingkool68'4
$score
通过遍历事物数组并增加变量来计算。 pastebin.com/fkSXY04m