WordPress как на ладони
Шаблоны, плагины и темы для настоящих поклонников Elementor. От TemplateMonster.com wordpress jino

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

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

Хотелось бы получить SQL запросы при замене домена, у вас наверняка есть такой код.

0
Гость
2.3 года назад
  • 0
    Kama6812

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

    /**
     * Замена старого домена на новый повсюду в базе данных 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: 10
     */
    if( isset($_GET['change_domain']) ){
    
    	function kama_repdomains(){
    
    		$old_domain = 'site.ru';
    		$new_domain = 'dev.site.ru';
    
    		// добавим схему если её нет. '//' в начале считается наличием схемы...
    		$perlace_doms = array();
    		if( preg_match('~^(https?://|//)~', $old_domain) ){
    			$perlace_doms[ $old_domain  ] = $new_domain;
    		}
    		// если никакой протокол не указан
    		else {
    			$scheme = @ $_SERVER['REQUEST_SCHEME'] === 'https' || @ $_SERVER['HTTPS'] === 'on' || $_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http';
    			$new_domain  = "$scheme://$new_domain";
    			$perlace_doms[ "http://$old_domain"  ] = $new_domain;
    			$perlace_doms[ "https://$old_domain" ] = $new_domain;
    			$perlace_doms[ "//$old_domain" ] = preg_replace('~https?:~', '', $new_domain ); // вариант без протокола
    		}
    
    		// 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)",
    		);
    
    		$outdata = array();
    		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 '___explode_mark___
    		<h2>Замена домена в БД</h2>
    		<h4>'. implode('<br>', array_keys($perlace_doms) ) .' <br>на<br> '. $new_domain .'</h4>
    		<h4>
    			<'.'pre>'. print_r( $outdata, 1) .'</'.'pre>
    			Заметка: сколько строк затронуто указано в элементе массива: UPDATE table_name:
    		</h4>
    		';
    
    		exit; // die - not available in shutdown_function
    	}
    
    	ob_start(function($buffer){
    		$html = explode('___explode_mark___', $buffer);
    		return $html[1];
    	});
    
    	if( function_exists('did_action') && did_action('plugins_loaded') )
    		kama_repdomains();
    	else
    		register_shutdown_function('kama_repdomains');
    }
    
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация