如何在WordPress中使定制器图像协议成为相对的?

时间:2017-02-17 作者:ben.kaminski

我正在努力消除我网站上的“混合内容”,并且在网站的每个区域都这样做了,除了一个区域。

通过主题定制器上传的任何图像都不是协议相关的,也不是https,通过定制器上传的所有图像都显示为“http://”。

自定义程序使用Media Gallery上载程序,但其操作方式似乎不同。如果我将图像上载到媒体库(无自定义程序),将其放置到页面中,WP会知道是否在http和https之间切换,不过,当通过主题自定义程序功能尝试切换时:

$wp_customize->add_setting(\'slide_img_upload_one\');
$wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, \'slide_img_upload_one\', array(
    \'label\'    => __(\'Upload first image:\', \'example_theme\'),
    \'section\' => \'carousel_slide_section\',
    \'settings\' => \'slide_img_upload_one\',
    \'description\' => \'Upload your first slider image here.\'
)));
我拿不到WP_Customize_Image_Control(); 输出“https”或(最佳方案)协议相关// 指向符合SSL的映像的url。

一些需要注意的事情。我不会在我的网站上强制SSL,所以在设置->常规;我不会改变http协议的url。

我也不是在寻找一种使用方法。htaccess强制执行此操作。

总而言之,必须有一种方法通过主题定制器上传的图像与协议相关,但我需要一些帮助来解决这个问题。我目前正在运行WP 4.6(是的,我知道我有点落后)。

希望其他人在R&;事实证明,在尝试解决像WordPress主题定制器func这样的特定问题时,D是无用的。

提前感谢您的帮助、想法、头脑风暴。。。欢迎所有想法!

我正在使用以下命令调用页面上的customizer函数:

<a href="<?php echo esc_url(get_theme_mod(\'slide_one_link\')); ?>"><img src="<?php echo esc_url( get_theme_mod( \'slide_img_upload_one\' ) ); ?>" alt="<?php echo get_theme_mod( \'slide_title_1\' ); ?>" /></a>
仅供参考:我在这里尝试了解决方案,但没有成功:Failed Attempt

2 个回复
最合适的回答,由SO网友:David Lee 整理而成

我认为更简单的解决方案是创建自己的函数:

function get_theme_mod_img($mod_name){
     return str_replace(array(\'http:\', \'https:\'), \'\', get_theme_mod($mod_name));
}
那就用它吧:

<a href="<?php echo esc_url(get_theme_mod(\'slide_one_link\')); ?>"><img src="<?php echo esc_url( get_theme_mod_img( \'slide_img_upload_one\' ) ); ?>" alt="<?php echo get_theme_mod( \'slide_title_1\' ); ?>" /></a>
如您所见,还有另一种涉及过滤器的解决方案herehere 过滤器的应用方式如下:

return apply_filters( "theme_mod_{$name}", $mods[$name] );

$mods[ $name ] = apply_filters( "pre_set_theme_mod_{$name}", $value, $old_value );
但您必须为每个图像设置添加一个过滤器:

add_filter(\'theme_mod_my-setting-image-name\', \'function_that_strips_protocol\');
这未经测试,我认为它还将涉及定制预览逻辑。

SO网友:user1503606

我需要额外检查一下。

/**
 *
 * @param Checks for ssl returns https if needed
 * @param int $p
 * @return filter
 */
function get_theme_mod_ssl($mod_name){
    if (is_ssl()) {
      return str_replace(array(\'http:\', \'https:\'), \'\', get_theme_mod($mod_name));
    }else{
      return get_theme_mod($mod_name);
    }
}