我面临以下问题:
我过去常常将所有样式保存在主题选项页面中。当用户单击保存按钮时,我有一个后端脚本生成带有更改的css文件,这样它们就不会在每个页面中内联输出。这有很多好处,其中包括缓存。
我已经切换到主题定制器,一切都很好,除了我找不到挂钩“保存”按钮的方法。我想在后端单击该按钮时触发一个更新css文件内容的函数。
这甚至可能吗?
谢谢!
答案 0 :(得分:7)
自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/
答案 1 :(得分:5)
我面临同样的情况。 customize_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函数。
同样,这有点像黑客。不幸的是,这是我当时能找到的最好的。
另一个选择是使用ajax响应只是ping一个php文件。这感觉更糟糕了。
另一个快速的黑客行为是做一个javascript动作,当点击保存按钮时,它会设置一个计时器来延迟调用运行编译的PHP文件。这对我来说非常黑客。
上述唯一的后备,除非重新加载自定义程序或保存其他值,否则您可能无法获得所需的所有值。
其他人有更好的主意吗?
**更新** 刚刚将以下请求添加到Wordpress团队。希望我们能把它挤进那里。
*更新2 * 看起来它将作为customize_save_after出现在3.6版本中。猜猜一些推文和示例代码即使使用Wordpress团队也能让事情发生。 ;)
答案 2 :(得分:4)
正如@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/ @otto。
文件保存的解决方案是使用wp_filesystem。要使用wp_filesystem,您需要用户的文件凭据(ftp)。
将在AJAX请求中调用 customize_save_after
,结果将不可见。 AJAX句柄的原因是你不能要求用户提供需要表单提交的文件凭证。
可以通过将文件凭据保存到wp-config.php并将它们(临时)添加到数据库来找到解决方案。执行此操作savesettings
可以从数据库中读取凭据并使用它们通过使用凭据来保存文件。 (此解决方案在此处有更详细的描述:https://wordpress.stackexchange.com/a/126631/31759)
答案 3 :(得分:0)
未经过测试,但/wp-includes/class-wp-customize-manager.php
中有动作挂钩 customize_save
。
它位于save()
函数内:
/**
* Switch the theme and trigger the save action of each setting.
*
* @since 3.4.0
*/
此文件中还有一些其他有趣的操作挂钩(do_action
)可能值得检查。