如何在不使用全局变量的情况下从主题模板访问插件变量?

时间:2017-07-08 作者:Pisuke Soramame

有没有一种方法可以在不使用全局变量的情况下从主题模板文件访问插件变量?

我有以下情况:

一个插件函数验证表单中提交的POST数据Here 使用自定义过滤器有一个有趣的解决方案。然而,我在不同的表单中使用相同的函数集,表单之间的验证规则会发生变化,因此错误也会有所不同。我希望实现一些内联的功能,而不是为每种情况创建不同的回调函数。

在主题模板文件中:

$errors = apply_filters(\'form_errors\',\'\');
if ($errors != \'\') {echo $errors;}
我希望插件中包含以下内容:

$errors = validate_form($_POST)
// the following line won\'t work as a callback function is needed.
// Using a callback function would probably not solve the issue, as different
// errors need to be passed depending on which form is validated. 
add_filter(\'form_errors\', $errors);
// the following would work, but how to pass the actual errors as argument to the return_error function?
add_filter(\'form_errors\', \'return_errors\'); 
有没有办法避免将$错误声明为全局错误?

1 个回复
SO网友:majick

使用add_filter 将自动通过$errors 到回调函数:

add_filter(\'form_errors\', \'return_errors\');

function return_errors($errors) {
    // validate $errors based on form conditions
    return $errors;
}
如果过滤器传递了多个变量,则可以通过添加过滤器优先级和指定要传递给回调函数的参数数量来访问额外信息。例如,如果验证函数具有:

return apply_filters(\'form_errors\', $errors, $posted);
您可以使用:

add_filter(\'form_errors\', \'return_errors\', 10, 2);
function return_errors($errors, $posted) {
    // form validation code using $errors or $posted
    return $errors;
}
请注意,在这种情况下,需要将过滤器优先级显式设置为第三个参数的原因是,这样您就可以“转到”的第四个参数add_filter - 这也是要传递的筛选器参数数。

结束

相关推荐

在非文档挂接上调用Apply_Filters

我一直在努力学习如何编写插件,我认为最好的方法是查看其他插件。我在看这一行和第一行/** * Plugin Name: Media Library Categories * Plugin URI: http://wordpress.org/plugins/wp-media-library-categories/ * Description: Adds the ability to use categories in the media library. * Vers