WordPress有许多很好看的主题,optimizer就是其一。考虑到网络安全,所以还是要强行开启全站HTTPS访问。
一、修改主题文件中静态链接
万恶的开发者啊,能使用Google Code Style推荐的 //代替http://或者https://吗?
居在后台自定义面板写了27个http://的固定连接,让我们这些强迫症患者又折腾了半天。
针对optimizer主题的解决办法:打开customizer/upgrade-pro.php 将所有的 http://替换为https://或者直接就是//
二、修改optimizer数据表中内容
optimizer强制要显示他的logo在网站标题上方,这可以理解,但可气的是,这logo用的是静态HTTP链接地址,无法在自定义中更改,导致主页无法全部HTTPS,这让强迫症患者无法接受。
于是乎,开始研究这套主题的运行方式,看看这logo的链接地址到底在哪儿,找到了应该还能把它换成自己的logo吧~~
1、分析生成首页HTML相关的PHP文件
直接F12调试对比代码,发现首页模板 index.php 并没有 layer_wrapper selected_stat 相关class,那肯定就在主题页眉 header.php 里面了。
打开一看,
<div id=”slidera” class=”layer_wrapper <?php if(!empty($optimizer[‘hide_mob_slide’])){ echo ‘mobile_hide_slide’;} ?>“>
<?php $slidertype = $optimizer[‘slider_type_id’]; ?>
<?php get_template_part(‘frontpage/slider’,”.$slidertype.”); ?>
</div>
下划线这一段,应该是判断是否输出滑动页面下面这一大堆东西的,明显这里是要输出的。后面的’slider_type_id’则应是对应的特效模板标号。后面get_template_part应该是调用了关于template_parts – ‘slidertype’的php文件,然而我这里只有static类型的(估计是免费版过,收费版有其他功能吧),那就先去看看static吧。
找到frontpage/slider-static.php ,果然
<div class=”stat_content stat_content_<?php echo $optimizer[‘slider_content_align’]; ?>”>
<div class=”stat_content_inner”>
<div class=”center”>
<?php echo do_shortcode($optimizer[‘static_img_text_id’]); ?>
<div class=”cta_buttons”>
根据html源码定位至class center,并且在其包含的class cta_buttons前,即标红的这一句,就是我们要找的啦!也符合我们之前的判断,的确是直接输出静态链接。
2、找到原因并更改
<?php echo do_shortcode($optimizer[‘static_img_text_id’]); ?>
do_shortcode的作用是搜索 $content 中的短代码(shortcode)并调用其对应的处理函数来替换。
也就是说,最终输出的所有的相关代码源自$optimizer[‘static_img_text_id’]);
所以,现在要看看这个主题所设置的变量optimizer到底怎么定义的了(尽管我已经猜到了,这些肯定放在数据库里,直接泛匹配查找slide_icon.png就锁定了)
显然,根据WordPress相关文档定义,这应该来自数据库中wp_options表,有关optimizer的字段(其实是我猜的,目前没找到那破玩意在哪儿定义的。我只找到 $optimizerdb = get_option( ‘optimizer’ ); 揣摩其意思,应该是读取wp_options表里optimizer的内容)
找到function.php中的
$optimizerdb = get_option( ‘optimizer’ );
以及customizer/extra.php中的
<!–CONVERSION PROCESS–>
<?php global $optimizer;global $optimizerdb; if(!empty($optimizerdb) && empty($optimizer[‘converted’]) ) { ?>
<div class=”conversion_message”>
<div class=”convert_inner”>
<p><?php _e(‘Please Click the “Convert” Button to Update to the Latest version of the theme.’, ‘optimizer’); ?></p>
<form action=”” method=”post”>
<p><input type=”submit” name=”convert” id=”convert_button” class=”button-primary” value=”<?php _e(‘Convert’, ‘optimizer’); ?>” /></p>
<?php wp_nonce_field(‘optimizer_convert’, ‘optimizer_convert’); ?>
</form>
</div>
</div>
<?php } ?>
变量optimizerdb读取数据库中wp_options表里的名为optimizer的内容,如果optimizerdb有内容存在并且optimizer没有字串”converted”,那么就转换?
反正跟optimizerdb相关就这些了,其余跟optimizer相关太多,但都跟数据库没关系,都是替换之类的,也没看到slide_icon.png路径有关的(估计是作者为了防止logo被换藏起来了)。。。
总之,就暂时研究到这儿,初步判断就是变量optimizer与数据库options表中名为optimizer的值有关,所以替换值里面的http为https即可。
3、在数据库中更新
update wp_options set option_value=replace(option_value,’http://’,’https://’) where instr(option_value,’http://’)>0;
注意备份数据库!!切记别偷懒不加:// 这样可能导致其他http或https被替换。。。
写在最后,改完后,终于出现了小绿锁了,全局HTTPS成功!WordPress真够折腾的啊。。。
0 条评论