Wordpress Parallax-One theme
We use quite cool Parallax-One theme for our cloud representation website. But recently I had the issue after changed website hostname.
All uploaded resources, like http://hostname/wp-content/uploads/2016/08/icon8.png, were linked to old hostname. The theme saved links in wordpress option "theme_mods_Parallax-One", and does not renew it after moving to new hostname.
First thought is quick fix by updating this option directly in database:
mysql -u root -p
mysql> use wordpress;
mysql> select option_id, option_value from wp_options where option_name = 'theme_mods_Parallax-One'
mysql> | 169 | a:35:{i:0;b:0;s:26:"parallax_one_logos_content";
s:1255:"[{"text":"undefined","link":"#",
"image_url":"http:\/\/old_hostname\/wp-content\/uploads\/2016\/08\/turnkey_logo.jpg",
"title":"undefined","subtitle": ...
But wp_options are PHP serialized objects, so if length of new_hostname and old_hostname is not equal, you have got a problem. You have to change length of the string encoded as follows:
s:<string length>:"string value"And if there is missmatched something - theme will not load.
So let me introduce a little addition to Parallax-One theme. This patch adds input field 'Uploads Resource Hostname' to the inc/customizer.php. On saving changes it updates all upload URL hostnames to the specified hostname.
--- /root/customizer.php 2016-10-07 07:50:12.044940980 +0000
+++ customizer.php 2016-10-10 07:56:31.812266652 +0000
@@ -903,6 +903,36 @@
'section' => 'parallax_one_general_section',
'priority' => 12,
));
+
+ /** FIX change uploads resources hostname **/
+ $wp_customize->add_setting( 'parallax_one_uploads_hostname', array(
+ 'sanitize_callback' => 'parallax_one_sanitize_input',
+ 'validate_callback' => 'update_uploads_hostname',
+ 'transport' => 'postMessage'
+ ));
+ $wp_customize->add_control( 'parallax_one_uploads_hostname', array(
+ 'label' => esc_html__('Uploads Resource Hostname','parallax-one'),
+ 'section' => 'parallax_one_general_section',
+ 'priority' => 13,
+ ));
+ function update_uploads_hostname($validity, $value) {
+ if (!isset($value) || $value == "" || $value == $_SERVER['HOST_NAME']) return $validity;
+ $mods = get_option("theme_mods_Parallax-One");
+ $replace = function (&$url, $new_hostname) {
+ $url = preg_replace('/(http[s]?:(\\\\)?\/(\\\\)?\/)[^\\\\\/]+((\\\\)?\/wp-content(\\\\)?\/uploads)/', "$1$new_hostname$4", $url);
+ $url = preg_replace('/((http[s]?:)?(\\\\)?\/(\\\\)?\/)[^\\\\\/]+((\\\\)?\/wp-content(\\\\)?\/themes)/', "$1$new_hostname$5", $url);
+ };
+ foreach (array_keys($mods) as $key) {
+ if (is_string($mods[$key])) $replace($mods[$key], $value);
+ if (is_object($mods[$key])) { //for URLs in attachments, saved as objects, go through all string properties
+ foreach ($mods[$key] as $prop=>$pvalue) {
+ if (is_string($pvalue)) $replace($mods[$key]->$prop, $value);
+ }
+ }
+ }
+ update_option( "theme_mods_Parallax-One", $mods );
+ return $validity;
+ }
/*********************************/
.png)
Thanks for the article, very helpful. I took your code and applied it to my site by making a parallax background. My site is built on a WP platform, as the basis took a ready-made template, with a minimum of changes. The site is made for selling video games, after adding parallax effect and background change, sales grew by 10%, I would never have thought that such insignificant changes would lead to such a result.
ReplyDelete