WordPress как на ладони
wordpress jino

Как поменять название домена при переезде на другой домен?

Скажите пожалуйста как правильно изменить название домена на рабочем сайте, когда я изменяю домен сайта, т.е. переезжаю на другой домен. Например был site.ru, а стал mysite.ru. Такая смена домена иногда очень тормозит разработку...

Я нашел в сети вариант от Миши: Генератор SQL-запросов, необходимых при смене домена сайта на WordPress. Попробовал его, вроде бы все работает.

Тут задаю вопрос просто так, интересно ваше мнение.

Спасибо за ответ и за такой замечательный сайт!

Успехов вам во всем!

0
Гость 1.5 года назад
  • 0
    Kama4662

    Я использую такой код:

    /**
     * Замена старого домена на новый повсюду в базе данных WordPress. Нужно при смене домена сайта.
     *
     * Использование:
     * 1. Вставьте код в файл 'wp-config.php' или в любой другой файл, например, 'functions.php' темы.
     * 2. Добавьте в любой URL сайта параметр 'change_domain': 'http://site.ru?change_domain'.
     * 3. зайдите на сайт. На экране увидите такой текст: "Замена домена в БД: с 'old' на 'new'. Обработано строк в базе данных: 25"
     *
     * Автор: Kama
     * URL: http://wp-kama.ru/question/kak-pomenyat-nazvanie-domena-pri-pereezde-na-drugoj-domen
     * ver: 9
     */
    if( isset($_GET['change_domain']) ){
    
    	function kama_repdomains(){
    
    		// http и https добавляется автоматически
    		$old_domain = 'xoxo.ru';
    		// '' = текущий домен сайта (без слэша на конце, с http(s))
    		$new_domain = 'new-xoxo.ru';
    
    		$scheme = @ $_SERVER['REQUEST_SCHEME'] === 'https' || @ $_SERVER['HTTPS'] === 'on' || $_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http';
    
    		if( ! $new_domain )
    			$new_domain = $_SERVER['HTTP_HOST']; // текущий домен по умолчанию
    
    		$old_domain = rtrim( $old_domain, '/'); // удалим закрывающий слэш
    		$new_domain = rtrim( $new_domain, '/'); // удалим закрывающий слэш
    
    		// добавим схему если её нет. '//' в начале считается наличием схемы...
    		$perlace_doms = array();
    		// если никакой протокол не указан
    		if( ! preg_match('~^(https?://|//)~', $new_domain) ){
    			$new_domain  = "$scheme://$new_domain";
    		}
    		// если никакой протокол не указан
    		if( ! preg_match('~^(https?://|//)~', $old_domain) ){
    			$perlace_doms[ "http://$old_domain"  ] = $new_domain;
    			$perlace_doms[ "https://$old_domain" ] = $new_domain;
    			// без протокола
    			$perlace_doms[ "//$old_domain" ] = preg_replace('~https?:~', '', $new_domain );
    		}
    		else {
    			$perlace_doms[ $old_domain  ] = $new_domain;
    		}
    
    		$outdata = [];
    
    		// SQL запросы
    		global $wpdb;
    		$sqls = array(
    			"UPDATE {$wpdb->prefix}options"  => " SET option_value = REPLACE(option_value, %s, %s) WHERE option_name = 'home' OR option_name = 'siteurl'",
    			"UPDATE {$wpdb->prefix}posts"    => " SET post_content = REPLACE (post_content, %s, %s)",
    			"UPDATE {$wpdb->prefix}posts"    => " SET guid = REPLACE (guid, %s, %s)",
    			"UPDATE {$wpdb->prefix}postmeta" => " SET meta_value = REPLACE (meta_value, %s, %s)",
    			"UPDATE {$wpdb->prefix}comments" => " SET comment_content = REPLACE (comment_content, %s, %s)",
    			"UPDATE {$wpdb->prefix}comments" => " SET comment_author_url = REPLACE (comment_author_url, %s, %s)",
    		);
    
    		foreach( $sqls as $uptable => $_sql ){
    			$_sql = "$uptable $_sql";
    			foreach( $perlace_doms as $old_dom => $new_dom ){
    				$sql = $wpdb->prepare( $_sql, $old_dom, $new_dom );
    				$outdata[$uptable] += $wpdb->query( $sql );
    				$outdata[] = $sql;
    			}
    		}
    
    		echo '
    		<h1>Замена домена в БД: '. implode(', ', array_keys($perlace_doms) ) .' → '. $new_domain .'.</h1>
    		<h4><br><br>
    			Обработано строк (указано количество):
    			<'.'pre>'. print_r( $outdata, 1) .'</'.'pre>
    		</h4>
    		';
    
    		exit;
    		// die - not available in shutdown_function
    	}
    
    	if( function_exists('did_action') && did_action('plugins_loaded') ){
    		kama_repdomains();
    	}
    	else {
    		ob_start(function($buffer){
    			$html = explode('---explode-mark---', $buffer);
    			return $html[1];
    		});
    
    		register_shutdown_function('kama_repdomains');
    	}
    
    }
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.