,

WordPress Domain Suchen und ersetzen

Es gibt diverse Plugins für WordPress, welche die Datenbank durchsuchen und Domain Vorkommnisse ersetzen. Doch was, wenn das WordPress bereits nicht mehr aufrufbar ist, da eine Umstellung schief ging? Dazu sind Plugins nicht brauchbar. Aus diesem Grund stelle ich meine Domains, mit einem kleinen PHP Skript um, was ich hier vorstelle.

Das Skript durchsucht nicht die komplette Datenbank, was viel zu aufwändig ist, sondern Sucht und Ersetzt nur in gewissen bekannten Tabellen. Dies machen auch viele Plugins identisch. Der Vorteil beim Skript, Arrays werden auch durchsucht und korrekt ersetzt.

Dabei unterstützt das Skript folgende Dinge:

  • Seiten + Beiträge
  • Alle Custom Post Types
  • Plugin Yoast SEO + WPSEO
  • LayerSlider
  • Alle Meta Felder

Das Skript muss im ROOT Verzeichnis von WordPress deponiert werden und der Suchbegriff sowie der Ersatzbegriff muss definiert werden. Ist dies vorgenommen, kann das Script einfach über das Web aufgerufen werden. Anschliessend sind alle Suchbegriffe mit dem Ersatzbegriff ersetzt und WordPress hat eine saubere Domainumstellung durchgeführt (solange die Domains nicht in der wp-config.php fest eingetragen wurden).

Das Skript dazu ist:

<?php
/*
	Name: DB Search and Replace
	Description: Replaces all Domain occurrences for Yoast SEO, LayerSlider, Post, Pages, Custom Post Types and Meta Fields of Post, Pages, Custom Post Types
	
	Version: 1.0
	Author: web updates kmu GmbH
	Author URI: http://wuk.ch/
	
	Copyright (c) 2019 web updates kmu GmbH <fragen@wuk.ch>
	All rights reserved.
*/

/*
	Settings
*/

$alt = "";
$neu = "";

/*
	Do not modify the script beyond this point!
*/
require_once ('wp-config.php');

if ($alt=="" OR $neu=="") {
	exit("Please fill-out the Settings within the replacer.php file!");
}
if (!stristr($alt,"http") OR !stristr($neu,"http")) {
	exit("Please deliver domain including Scheme to avoid issues:<br><br><b>Bad example:</b><br>\$alt = \"url.com\";<br>\$neu = \"www.url.com\";<br><br>This will also replace suburl.com with subwww.url.com!<br><br><b>Good example:</b><br>\$alt = \"http://alte.url.com\";<br>\$neu = \"https://neue.url.com\";");
}

$alt = strtolower($alt);
$neu = strtolower($neu);

$wpdb->show_errors();
echo "Replacer gestartet";
wukReplacer($alt,$neu);
wukReplacer(str_replace(array("/",":"," "),array("%2F","%3A","%20"),$alt),str_replace(array("/",":"," "),array("%2F","%3A","%20"),$neu));
wukReplacer(str_replace("/","\\/",$alt),str_replace("/","\\/",$neu));
$wpdb->hide_errors();

if (!function_exists('wukReplacer')) {
	function wukReplacer($srstra,$srstrb) {
		global $wpdb;
		
		$wpdb->get_results("UPDATE `".$wpdb->prefix."yoast_seo_links` SET `url`= replace(url, '".esc_sql($srstra)."', '".esc_sql($srstrb)."');");
		$wpdb->get_results("UPDATE `".$wpdb->prefix."layerslider` SET `data`= replace(data, '".esc_sql($srstra)."', '".esc_sql($srstrb)."');");
		$wpdb->get_results("UPDATE `".$wpdb->prefix."posts` SET `guid`= replace(guid, '".esc_sql($srstra)."', '".esc_sql($srstrb)."');");
		
		$wpdb->get_results("UPDATE `".$wpdb->prefix."options` SET `option_value`= replace(option_value, '".esc_sql($srstra)."', '".esc_sql($srstrb)."') WHERE option_value not like 'a:%';");
		$qry = $wpdb->get_results("SELECT option_value,option_id FROM `".$wpdb->prefix."options` WHERE option_value like 'a:%';");
		if (count($qry) >= '1') {
			foreach ($qry as $row) {
				$value = serialize(array_value_replace(unserialize($row->option_value), $srstra, $srstrb));
				if (strlen($value) >= 10) {
					$wpdb->get_results("UPDATE `".$wpdb->prefix."options` SET `option_value`='".esc_sql($value)."' WHERE option_id='".esc_sql($row->option_id)."' LIMIT 1;");
				}
			}
		}
		$wpdb->get_results("UPDATE `".$wpdb->prefix."postmeta` SET `meta_value`= replace(meta_value, '".esc_sql($srstra)."', '".esc_sql($srstrb)."') WHERE meta_value not like 'a:%';");
		
		$qry = $wpdb->get_results("SELECT meta_value,meta_id FROM `".$wpdb->prefix."postmeta` WHERE `meta_value` like '%".esc_sql($srstra)."%' AND meta_value like 'a:%';");
		if (count($qry) >= '1') {
			foreach ($qry as $row) {
				$value = serialize(array_value_replace(unserialize($row->meta_value), $srstra, $srstrb));
				if (strlen($value) >= 10) {
					$wpdb->get_results("UPDATE `".$wpdb->prefix."postmeta` SET `meta_value`='".esc_sql($value)."' WHERE meta_id='".esc_sql($row->meta_id)."' LIMIT 1;");
					echo ". ";
				}
				
			}
		}
		$wpdb->get_results("UPDATE `".$wpdb->prefix."posts` SET `post_content`= replace(post_content, '".esc_sql($srstra)."', '".esc_sql($srstrb)."');");
		unset($qry);
		return;
	}
}
if (!function_exists('array_value_replace')) {
	function array_value_replace($maybe_array, $replace_from, $replace_to) {
		if (!empty($maybe_array)) {
			if (is_array($maybe_array)) {
				foreach ($maybe_array as $key => $value) {
					$key_new = str_replace($replace_from, $replace_to, $key);
					if ($key_new != $key) {
						unset($maybe_array[$key]);
						$key = $key_new;
					}
					$maybe_array[$key] = array_value_replace($value, $replace_from, $replace_to);
				}
			} else {
				if(is_string($maybe_array)){
					$maybe_array = str_replace($replace_from, $replace_to, $maybe_array);
				}
			}
		}
		return $maybe_array;
	}
}

Und als Download als ZIP: Replacer.zip