我正在为我的定制器使用postMessage,并试图避免在定制器中重复。php和customizer。js如何使用customizer中的变量$css。php并将其包含在customizer中。js以避免重复h1、h2、h3等。因此,现在它的工作原理如下:
customizer.php code
function my_styles_method() {
wp_enqueue_style(
\'custom-style\',
get_template_directory_uri() . \'/custom-css.css\'
);
$colors = array(
\'headings_color\' => get_theme_mod( \'wpt_heading_color\' ),
);
$css_output = "{color: {$colors[\'headings_color\']}; }";
$custom_css = "h1,h2,h3,h4,h5,h6";
$css = $custom_css . $css_output;
wp_add_inline_style( \'custom-style\', $css );
}
add_action( \'wp_enqueue_scripts\', \'my_styles_method\', 21 );
customizer.js code
wp.customize( \'wpt_heading_color\', function( value ) {
value.bind( function( newval ) {
$( \'h1,h2,h3,h4,h5,h6\').css( \'color\', newval );
});
});
最合适的回答,由SO网友:Alexander 整理而成
嗯,我终于成功了。我只是忘了添加\\u inline\\u样式。非常感谢韦斯顿·鲁特的帮助。因此,最终代码是:
function my_styles_method() {
wp_enqueue_style(
\'custom-style\',
get_template_directory_uri() . \'/custom-css.css\'
);
$colors = array(
\'headings_color\' => get_theme_mod( \'wpt_heading_color\' ),
);
$css_output = "{color: {$colors[\'headings_color\']}; }";
$selector = "h1,h2,h3,h4,h5,h6";
$css = $selector . $css_output;
wp_add_inline_style( \'custom-style\', $css );
wp_localize_script( \'wpt_customizer\', \'MyStylesSelector\', $selector );
}
add_action( \'wp_enqueue_scripts\', \'my_styles_method\', 21 );
/**
* Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
*/
function wpt_customize_preview_js() {
wp_enqueue_script( \'wpt_customizer\', get_template_directory_uri() . \'/js/theme-customizer.js\', array( \'customize-preview\' ), \'\', true );
}
add_action( \'customize_preview_init\', \'wpt_customize_preview_js\' );
Gist链接-
https://gist.github.com/DeoThemes/ae61a166d09dba4817fb6e6d0ce78c8f
SO网友:Weston Ruter
使用wp_add_inline_script()
将变量从PHP导出到JS。例如,在my_styles_method
假设您的customizr.js
脚本具有句柄my-styles-customize-preview
:
wp_add_inline_script(
\'my-styles-customize-preview\',
sprintf( \'var MyStylesSelector = %s;\', wp_json_encode( $custom_css ) ),
\'before\'
);
然后您可以将JS修改为:
wp.customize( \'wpt_heading_color\', function( value ) {
value.bind( function( newval ) {
$( MyStylesSelector ).css( \'color\', newval );
});
});
尽管如此,我还是建议使用一种更好的方法,即更新内联样式元素,而不是设置
style
对于每个元素。例如:
wp.customize( \'wpt_heading_color\', function( setting ) {
setting.bind( function( value ) {
$( \'#custom-style-inline-css\' ).text( MyStylesSelector + \'{ color: \' + value + \'}\' );
});
});
这也是使用自定义选择性刷新的一个很好的候选者
Partial
将部分刷新请求短路到服务器,并通过重写
refresh
方法