33Plugin Name: Force HTTPS
44Plugin URI: https://www.littlebizzy.com/plugins/force-https
55Description: HTTPS enforcement for WordPress
6- Version: 3.0 .0
6+ Version: 2.1 .0
77Author: LittleBizzy
88Author URI: https://www.littlebizzy.com
99Requires PHP: 7.0
@@ -123,40 +123,57 @@ function force_https_filter_output( $content ) {
123123add_filter ( 'the_content ' , 'force_https_process_content ' , 20 );
124124function force_https_process_content ( $ content ) {
125125 return preg_replace_callback (
126- '#(<(?:a|area|audio|blockquote|button|canvas|del|embed|form| iframe|img|input|ins| link|meta|object|picture|q|script| source|style|svg|track|video )[^>]+\s(?:action|background|cite|classid|codebase|content|data-[^\s=]+|formaction| href|longdesc|manifest|ping|poster| src|srcdoc|srcset|style|usemap|xlink:href )=[" \'])(http://|//)([^" \']+)#i ' ,
126+ '#(<(?:a|img|script| iframe|link|source|form )[^>]+\s(?:href|src)=[" \'])(http://|//)([^" \']+)#i ' ,
127127 function ( $ matches ) {
128128 return $ matches [1 ] . 'https:// ' . $ matches [3 ];
129129 },
130130 $ content
131131 );
132132}
133133
134- // enforce https for wp resource hints
134+ // force https inside inline script and style content
135+ add_filter ( 'the_content ' , 'force_https_fix_scripts_styles ' , 20 );
136+ function force_https_fix_scripts_styles ( $ content ) {
137+ return preg_replace_callback (
138+ '#(<script.*?>|<style.*?>)(.*?)</(script|style)>#is ' ,
139+ function ( $ matches ) {
140+ return $ matches [1 ] . str_replace ('http:// ' , 'https:// ' , $ matches [2 ]) . '</ ' . $ matches [3 ] . '> ' ;
141+ },
142+ $ content
143+ );
144+ }
145+
146+ // enforce https on wp resource hints to prevent mixed content issues
135147add_filter ( 'wp_resource_hints ' , 'force_https_fix_resource_hints ' , 20 );
136148function force_https_fix_resource_hints ( $ urls ) {
149+
150+ // return unchanged if not an array
137151 if ( ! is_array ( $ urls ) ) {
138152 return $ urls ;
139153 }
154+
155+ // enforce https on each resource hint url
140156 foreach ( $ urls as &$ url ) {
141157 if ( is_string ( $ url ) ) {
142158 $ url = set_url_scheme ( $ url , 'https ' );
143159 } elseif ( is_array ( $ url ) && isset ( $ url ['href ' ] ) ) {
144160 $ url ['href ' ] = set_url_scheme ( $ url ['href ' ], 'https ' );
145161 }
146162 }
163+
147164 return $ urls ;
148165}
149166
150- // enforce https on image srcsets
167+ // enforce https on image srcsets to prevent mixed content issues
151168add_filter ( 'wp_calculate_image_srcset ' , 'force_https_fix_image_srcsets ' , 999 );
152169function force_https_fix_image_srcsets ( $ sources ) {
153170
154- // exit if sources is not an array
171+ // return unchanged if sources is not an array
155172 if ( ! is_array ( $ sources ) ) {
156173 return $ sources ;
157174 }
158175
159- // loop through each image source and enforce https
176+ // loop through each source and enforce https on urls
160177 foreach ( $ sources as &$ source ) {
161178 if ( isset ( $ source ['url ' ] ) ) {
162179 $ source ['url ' ] = set_url_scheme ( $ source ['url ' ], 'https ' );
@@ -166,15 +183,20 @@ function force_https_fix_image_srcsets( $sources ) {
166183 return $ sources ;
167184}
168185
169- // ensure all urls in the upload directory use https
186+ // enforce https on urls in the upload directory to avoid insecure media links
170187add_filter ( 'upload_dir ' , 'force_https_fix_upload_dir ' , 999 );
171188function force_https_fix_upload_dir ( $ uploads ) {
189+
190+ // enforce https on the main upload url
172191 if ( isset ( $ uploads ['url ' ] ) ) {
173192 $ uploads ['url ' ] = set_url_scheme ( $ uploads ['url ' ], 'https ' );
174193 }
194+
195+ // enforce https on the base upload url
175196 if ( isset ( $ uploads ['baseurl ' ] ) ) {
176197 $ uploads ['baseurl ' ] = set_url_scheme ( $ uploads ['baseurl ' ], 'https ' );
177198 }
199+
178200 return $ uploads ;
179201}
180202
0 commit comments