【发布时间】:2019-06-02 13:27:57
【问题描述】:
我目前正在尝试覆盖插件中的过滤器。这个过滤器有 1 个变量,它定义了一些模板所在文件夹的根路径。
这个根路径通常在插件的 assets 文件夹中(Awesome Support)。因为我想覆盖模板,所以我需要将模板文件夹的根路径更改为我自己的文件夹,以便使用我自己的模板而不是原始模板。
经过大量搜索,我在文档中找到了正确的过滤器:Filter
过滤器在该文件的第 722 行应用:File
所以我已将此过滤器添加到我的主题 function.php 文件中:
add_filter( 'wpas_email_template_root_path', 'set_wpas_email_template_root_path', 30, 1 );
function set_wpas_email_template_root_path( $template_root_path ) {
error_log( 'email-functions.php' );
return get_home_path() . 'wp-content/themes/' . get_option( 'stylesheet' ) . '/awesome-support/emails/';
}
为了测试它,我在我的函数中以及我需要覆盖根路径的地方添加了一些错误日志记录:
error_log( 'Before' );
// Allow other add-ons to set this path
apply_filters( 'wpas_email_template_root_path', $template_root_path );
error_log( 'functions-tools.php' . $template_root_path );
这是调试结果:
[08-Jan-2019 08:56:19 UTC] Before
[08-Jan-2019 08:56:19 UTC] email-functions.php
[08-Jan-2019 08:56:19 UTC] functions-tools.php/var/www/vhosts/localhost/httpdocs/wp-content/plugins/awesome-support/assets/admin/email-templates/blue-block/
如您所见,仍然设置了插件模板路径。我不知道我在这里做错了什么..
【问题讨论】:
-
您是否尝试过优先考虑挂钩的运行时间? - 例如
add_filter( 'wpas_email_template_map_to_files', 'wpas_override_email_template_map', 9); -
是的,但不起作用..
-
要明确,如果你想覆盖变量值(不是函数),你的过滤器需要最后运行,所以“优先级”必须高于(晚)任何其他。您还可以在“apply_filter”语句周围临时添加一些调试,以确保代码到达那里,以及在您的 wpas_override_email_template_map 中以确保它正在执行
-
@anmari 我已经尝试了每一个prio,但总是在设置值之后添加过滤器,所以这没有影响。我不知道我应该尝试什么。
-
是的,这些值已经设置好了。你想要做的是覆盖它们?你的过滤器开火了吗?实际上查看第 722 行和您的代码,在我看来,您实际上想要做的就是更改模板路径。您所有的模板名称都相同,但您添加了代码来获取样式表?
标签: php wordpress function filter