Преди да преминете към промяна на URL адреса на вашия WordPress сайт, трябва да имате предвид как и къде точно е записан той в базата данни. Така ще можете да прецените дали искате промяната да се извърши автоматично, или вие собственоръчно ще промените адреса в настройките и базата данни на WordPress.
Как и къде се записва URL адресът на сайта в WordPress?
В таблица wp_options
Стандартно WordPress записва URL адреса на сайта в базата данни, в две определени таблици. За основната настройка на адреса, информацията се записва в таблица wp_options, с опциите „home“ и „siteurl„. Тези две опции се визуализират в административния панел -> Настройки, с имена „WordPress Адрес (URL)“ и „Адрес на сайта (URL)„.
WordPress Адрес (URL) – адрес, на който реално се намират системните файлове на WordPress, например http://mysuperblog.com/wordpress;
Адрес на сайта (URL) – адрес на сайта, така както искате да се изписва в уеб браузъра, например http://mysuperblog.com;
В таблица wp_posts
За всяка една страница, публикация и файл, системата WordPress създава и ползва уникален адрес, който се записва в таблица wp_posts, в колона GIUD.
Какво е GUID?
GUID (Globally Unique Identifier) е съкращение за глобално уникален идентификатор. Обикновено идентификаторите съдържат стринг с букви и цифри, например B42964FF като предназначението на всеки идентификатор е да гарантира уникалност на данните, свързани с този индекс.
Как WordPress използва GUID?
WordPress използва GUID, когато генерира своите RSS (и Atom) емисии и те съдържат маркера <guid></guid>
:
<guid isPermaLink = "false"> https://domain.com/?p=1234 </guid>
Вместо да генерира код за GUID, WordPress използва реалния URL адрес на публикацията като GUID. Може би сте забелязали, че когато запазвате публикация и въведете съществуващ slug (технологично име), WordPress добавя цифра като суфикс за да осигури уникалност на URL адреса в цялата база данни. Именно затова изборът на URL за GUID е едно много интелигентно решение.
Тези адреси не се променят, съдържат името на домейна и служат за глобален идентификатор на дадения елемент.
WordPress различава отделните статии, страници и други пост елементи по този уникален адрес. Той не се променя дори при редакция на url адреса на страницата.
Ако редактираме статия, с уникален адрес http://mysuperblog.com/?p=1
, и ѝ променим уеб адреса, например от /this-is-old-post.html
на /this-is-new-post.html
, за обикновения потребител и търсачките това ще изглежда като съвсем друга страница. За WordPress и RSS четците обаче, това ще е същата страница, защото уникалният ѝ идентификатор, пазещ се в базата данни в guid колоната, не се е променил (http://mysuperblog.com/?p=1
).
Когато са активирани „хубавите“ адреси, при достъп до уникалния идентификатор, WordPress ще направи автоматично пренасочване към уеб адреса на страницата.
http://mysuperblog.com/?p=1 -> http://mysuperblog.com/this-is-new-post.html
Уникалните идентификатори се ползват основно от четците на RSS новини, за да различават коя статия вече е свалена и коя е нова.
Сериализирани данни в базата данни
Когато url адресът на сайта е записан като обикновен текст в базата данни, промяната му може да се извърши, като само се смени стария с новия адрес. Когато обаче адресът е записан в сериализирани данни, само смяна на текста ще доведе до проблемна работа на зависимия плъгин, джаджа или тема.
Сериализацията е метод за съхранение на обекти, така че да може да се запазят заедно с параметрите им. При PHP системите информацията се преобразува в/от сериализирани данни чрез функциите на PHP serialize() и deserialze(). По този начин информацията се записва в базата данни във вид, в който PHP ще може да разбере и обработи. Този начин за съхранение на данни в базата данни се използва от самия WordPress, от плъгини, теми, джаджи и други.
В зависимост от функциите на даден плъгин, той може да си записва URL адреса на сайта в базата данни. Често може да се видят записи от плъгини в таблиците wp_options, wp_postmeta и много други. Когато плъгините записват адреса обаче, той най-често е съпроводен с някакви параметри, използвани от самия плъгин.
В тези случаи записите в базата данни имат подобен вид:
a:1:{s:14:“wordpress.home“;s:22:“http://mysuperblog.com“;}
a:2:{i:0;s:0:““;s:1:“x“;s:39:“http://mysuperblog.com/images/image.png“;}
Тези записи съдържат сериализирани данни, което означава, че при промяна на броя символи в URL адреса, ще трябва да се промени и предхождащия го параметър (s:xx:).
Ако адресът се променя например от http://mysuperblog.com на http://mynewsitename.com, последната част в посочените записи ще трябва да се промени от:
s:22:„http://mysuperblog.com“
s:39:„http://mysuperblog.com/images/image.png“
на:
s:24:„http://mynewsitename.com“
s:41:„http://mynewsitename.com/images/image.png“
Ако само се замени стария (mysuperblog.com) с новия домейн (mynewsitename.com), плъгинът, който ползва тези записи, ще спре да функционира коректно/изобщо.
По принцип на един нов WordPress сайт е напълно възможно, безпроблемно, да се промени адресът само с промяна на настройките през администрацията.
Когато обаче сайтът не е нов, вероятността да има инсталирани множество плъгини и извършени много настройки, е голяма. И промяната на адреса му неизбежно ще включва и работа със записите в базата данни.
Промяна на URL адреса в базата данни
Има няколко начина, чрез които можете да извършите смяната на стария, с новия адрес в базата данни. Тук ще видите само начините, които включват обработката и на сериализираните данни. Начинът чрез SQL заявка, за търсене и замяна на текста в цялата базата данни, ще бъде пропуснат. Както и другия начин – сваляне на SQL файл с информацията от базата данни и замяната на адреса в него. Към момента съществуват други, малко по-автоматични и надеждни начини, за да се извърши промяната коректно.
WP-CLI
Промяната на адреса в базата данни може да се извърши изключително бързо, лесно и коректно, с инструмента WP-CLI.
Примерна команда за WP-CLI, чрез която може да се смени адресът, като записите в колоната guid ще бъдат пропуснати:
wp search-replace ‘myblog.com’ ‘superblog.com’ –skip-columns=guid
Ако използвате системно инсталирания WP-CLI в хостинг акаунта, тогава командата ще изглежда така:
wp-cli search-replace ‘myblog.com’ ‘superblog.com’ –skip-columns=guid
Командата ще обработи и сериализираните данни в базата данни.
В командата search-replace на WP-CLI се използват възможностите на следния инструмент: Search-Replace-DB.
Плъгин
Промяна на данни в базата данни може да се извърши и през плъгин за WordPress. Ето няколко примерни плъгина: Better Search Replace, Search & Replace и WP Migrate DB.
Тези плъгини поддържат важната функционалност за обработка на сериализираните данни.
Промяна на URL адреса чрез конфигурационен файл
Посочените начини по-долу за промяна на адреса, няма да променят всички записи в базата данни, поради това не са препоръчителни. Въпреки това, можете да ги ползвате например за бърза, но временна промяна на адреса.
Файл wp-config.php
В конфигурационния файл на системата (wp-config.php) може да се зададе ръчно адреса на сайта. Например:
define('WP_HOME','http://mysupersite.com');
define('WP_SITEURL','http://mysupersite.com');
http://mysupersite.com – заменете с адреса на сайта;
Този начин за задаване на адреса е подходящ, ако сайтът е съвсем нов и в базата му данни все още няма други записи с адреса. При използване на този начин за задаване на адреса, съответните опции ще бъдат деактивирани в админ панела -> Настройки.
Файл functions.php
Файлът functions.php се ползва от темата на сайта. В него можете да добавите два реда, точно след отварящия PHP таг <?php
:
update_option( 'siteurl', 'http://mysupersite.com' );
update_option( 'home', 'http://mysupersite.com' );
http://mysupersite.com – заменете с адреса на сайта;
След като запишете файла и заредите сайта, записите в таблица wp_option (siteurl и home) ще се презапишат. Този начин за задаване на адреса няма да обнови останалите записи в базата данни.