我面临以下问题:
我曾经将所有样式保留在主题选项页面中。当用户单击保存按钮时,我有一个后端脚本,它生成了一个带有更改的 css 文件,这样它们就不会在每个页面中内联输出。这有很多好处,其中包括缓存。
我已经切换到主题定制器,一切都很好,除了我找不到连接“保存”按钮的方法。我想触发一个函数,当在后端单击该按钮时更新css文件的内容。
这甚至可能吗?
谢谢 !
从 WordPress 3.6.0 开始,您现在可以调用customize_save_after
.
<?php
function emailAdmin(){
mail('your@email', 'Woza!', 'You won\'t believe this but someone has updated the theme customizations!!');
}
add_action( 'customize_save_after', 'emailAdmin' );
?>
更多信息:http: //developer.wordpress.org/reference/hooks/customize_save_after/
我面临同样的情况。custom_save 在保存选项之前有效,所以就这样了。我已经通过电子邮件向 Otto (ottodestruct.com) 发送了邮件。
我现在的解决方案如下:
add_action('customize_save', 'regenCSS', 100);
function regenCSS( $wp_customize ) {
checkCSSRegen(); // Checks if I need to regen and does so
set_theme_mod('regen-css', time()+3); // Waits 3 seconds until everything is saved
}
function checkCSSRegen() {
if (get_theme_mod('regen-css') != "" && get_theme_mod('regen-css') < time()) {
makecss();
remove_theme_mod('regen-css');
}
}
我还添加了一个额外的 checkCSSRegen(); 到我的 customize_controls_init 函数。
同样,这有点像黑客攻击。不幸的是,这是我当时能找到的最好的。
另一种选择是使用仅 ping 一个 php 文件的 ajax 响应。这感觉比这更像是一种黑客行为。
另一个快速的技巧是执行一个 javascript 操作,当单击保存按钮时,它会设置一个计时器来延迟对运行编译的 PHP 文件的调用。这对我来说非常 hacky。
上述唯一的后备方案是,除非重新加载定制器或保存其他值,否则您可能无法获得所需的所有值。
还有人有更好的主意吗?
** 更新 ** 刚刚向 Wordpress 团队添加了以下请求。希望我们能把它挤进去。
* 更新 2 * 看起来它将在 3.6 版本中作为 customize_save_after。猜猜几条推文和示例代码甚至可以在 Wordpress 团队中实现。;)
正如@Dovy 所描述的,你customize_save_after
现在可以挂钩了:
do_action('customize_save_after', 'savesettings', 99);
将savesettings
设置保存到文件时,使用本机 php 文件函数(如 )执行此操作将是不好的做法,file_put_contents()
如下所述:http ://ottopress.com/2011/tutorial-using-the-wp_filesystem/ by @otto。
文件保存的解决方案是使用 wp_filesystem。要使用 wp_filesystem,您将需要用户的文件凭据 (ftp)。
customize_save_after
将在 AJAX 请求中调用,结果将不可见。AJAX 句柄的原因,您不能向用户询问需要提交表单的文件凭据。
可以通过将文件凭据保存到 wp-config.php 并将它们(临时)添加到数据库来找到解决方案。这样做savesettings
可以从数据库中读取凭据,并使用它们通过凭据来保存文件。(这里更详细地描述了这个解决方案:https ://wordpress.stackexchange.com/a/126631/31759 )
customize_save
未测试,但/wp-includes/class-wp-customize-manager.php
.
它在save()
函数内部:
/**
* Switch the theme and trigger the save action of each setting.
*
* @since 3.4.0
*/
此文件中还有一些其他有趣的操作挂钩 ( do_action
) 可能值得检查。