Пролетно почистване

Въпреки че си харесвах темата която намерих и човърках, накрая се уморих от външния и вид(и общия мрачен тон, който тя имаше). Аз съм изключително позитивен и усмихнат човек и ползването на толкова тъмна тема, не изразяваше много добре същността ми.

От може би половин година си бях наумил да сменя дизайна на блога си, но поради други по-важни неща(работа, личен живот и тн.) така и не ми се отдаде тази възможност. Да си призная, факта че визуалните изкуства не ми се отдават много много(мога да направя нов елемент да пасне вече съществуващия дизайн, но не мога да изградя нещо от нулата) също допринесе за забавянето.

Но изведнъж ми светна, че е време да си намеря нова тема. След бързо търсене в Google, се озовах на следната публикация във WPMU Dev – 85 Free Clean and Simple WordPress Themes. Честно казано темата Landscape от същия списък също ми допадна, но впоследствие реших да я пропусна поради тъмните и цветове(предполагам че това е нещо което щеше да е лесно да се оправи, но не ми се занимаваше). Въпреки че не всички теми от върпосния списък биха паснали за блога ми, някои от тях изглеждат доста добре и определено могат да паснат за различни видове сайтове.

В крайна сметка избрах темата Highwind от James Koster(не стигнах до края на списъка защото бях достатъчно впечатлен от тази конкретна тема). Тя е изчистена, приспособява се към всякакви устройства(което старта ми тема не поддържаше) и е центрирана около съдържанието. Темата може да се нагласи така че да е по ваш вкус, чрез използването на заглавни изображения(Header images) и вградения в WordPress Customizer(екран на който можете да променяте различни настройки на сайта и да ги преглеждате в реално време, без промените да засягат сайта за посетителите) дава лесен достъп до основния външен вид на сайта(основните цветове и позицията на страничната лента).

Темата е абсолютно безплата и със отворен код – можете да я намерите както на WordPress.org, така и на GitHub. Бърз преглед на кода ме остави с доброто впечатление, че темата е добре организирана и следва стандартите за код на WordPress. Също така темата е написана с мисълта за дъщерни теми, така че промяната на функционалността и чрез дъщерна тема е изключително лесно.

Прогрес с Multilingual WP

През последните две седмици нямах особено голяма възможност да отделя много време за работа по плъгина, ОБАЧЕ съм горд да заявя че 2 доста големи неща се случиха през това време:

1. Започнах да ползвам плъгина за голям корпоративен сайт

В компанията в която работя в момента получихме задачата да превърнем един ASP.NET сайт в WordPress сайт. Сайта е на два езика и има сравнително много съдържание – добре де, около 70 страници за всеки език и една камара файлове не е чак толкова много, но е значително повече от средностатистическия уеб сайт. Тъй като реших да не иползвам qTranslate когато стане дума за големи многоезични сайтове, реших да изпробвам моя плъгин и да видя как ще се сработи с подобен сайт и нуждите му.

Докато работех по сайта успях да намеря някои малки проблеми, които успях да оправя много бързо. Като цяло нищо сериозно не се появи, което ме кара да се чувствам по-сигурен относно (надявам се)скорошното пускане на плъгина за масова употреба

Също така се натъкнах на един друг проблем на многоезичните сайтове – понякога не всяка страница трябва да е достъпна на всеки език. Понякога искате да покажете специфично съдържание само за конкретен езики/езици. Ето следния пример:

Имате университет и на сайта му сте публикували информация за него – включително адрес, контакти, тн. Също така сте създали страница на майчиния ви език за програмите и намаленията от които местните студенти могат да се възползват – информация, която определено не е подходяща и нужна за чуждестранните ви студенти и тяхното посещение в сайта не трябва да се обременява с тази допълнителна информация. От друга страна сте създали и страница на чужд език, която обяснява какво предлагате на чуждестранните си студенти – отново нещо, което местните студенти няма да имат полза от. В крайна сметка искате да показвате тези страници само на очакваната за тях аудитория.

Почовърках малко тук и там и накрая намерих специфично решение за този сайт. Решението работи сравнително просто – на екрана за редактиране на всяка страница/публикация има панел със отметки за всеки един от активните в момента езици. Когато изберете някой език от този списък, тази страница става напълно недостъпна за съответния език – тя се премахва от навигацията, търсения, дори и ако се опитате да отворите страницата посредством правилния и адрес, ще получите грешка 404 – тоест, че страницата не е намерена. В момента се замислям да добавя тази функционалност към плъгина, обаче определено ще се наложи да поработя върху нея още малко.

2. Първия сайт който ползва Multilingual WP е вече на лице

Добре де – втория сайт, за който знам, но така или иначе не броя themoonwatch.com

Това е сайта за един от отборите които ще участват в състезанието Red Bull X-Alps тази година. Можете да разгледате техния сайт тук – X-Alps – BasqueTeam. Човека който разработи сайта е един от членовете на отбора – Iñigo Arizaga. Той първоначално се свърза с мен във връзка с няколко проблема с плъгина ми, и в последствие продължи да ме оведомява за малките проблеми на които се натъкваше докато разработваше сайта. Това беше изключително полезно за мен и за плъгина и аз много го оценявам Искам да им пожелая късмет, попътен вятър и подходящи метеорологични условия и най-важното – да се насладят на състезанието!

 

Във връзка с това – ако някой друг е успял да подкара сайта си ползвайки Multilingual WP за да го направи многоезичен – чувствайте се свободни да оставите коментар с линк към сайта си, така че аз(и всички останали) да разберат за него.

Миграция към Multilingual WP

След дълга и упорита работа по кода на плъгина за многоезично съдържание, най-накрая се усмелих да го пробвам на истински сайт – моя

Миграцията не беше толкова безпроблемна, колкото ми се искаше, но това се очакваше – така оправих куп малки проблеми, които не бях забелязал до тогава. За сега развитието на плъгина се движи доста добре и се надявам скоро да успея да го пусна официално за всички WordPress потребители(няма да се заемам с определяне на конкретна дата, защото много неща могат да се случат/променят дори само за седмица).

След като добавих поддръжка за страхотния плъгин за sitemaps Google XML Sitemaps(до сега това беше основната причина, поради която не исках да кача плъгина на моя сайт) и подобрявайки поддръжката за таксономиите, реших да кача плъгина на моя сайт и да видя какво ще се случи.

Ако решите да направите същото, моля ви, МОЛЯ ВИ, направете копие на базата с данни – в моя случай не се наложи да го използвам, но е добре да имате едно под ръка в случай че нещо се обърка.

След като активирах плъгина и настроих желаните езици, минах през миграцията на категориите и публикациите(което за 2 езика се случи учудващо бързо). Миграцията мина безупречно и накрая се оказах със съдържание на два езика в новия интерфеис(съдържанието бе мигрирано от qTranslate) – както за публикациите и страниците, така и за категориите и таговете.

Също така реших да ползвам една от възможностите на плъгина, която ми позволява да избера специфичен “slug” за всяка една от таксономиите(освен многоезичните “slug-ове” за всяка категория/таг). Това проработи долу-горе добре и се наложи да оправя няколко бъга свързани с тази опция. Единственото притеснение което може да имате ако ползвате тази опция е за сайтове които вече имат съдържание и са индексирани от търсачките – тъй като най-вероятно повечето линкове към съдържанието ви ще спрат да работят и ще се наложи да използвате плъгин който да пренасочи старите, неработещи линкове към новите. За целта аз иползвах плъгина 404 Redirected – не е особено ефикасен и му липсва поддръжка на регуларни изрази, но тъй като имам само шепа адреси в сайта си, това не беше голям проблем.

В случай че имате повече линкове, най-вероятно би било по-мъдро да използвате плъгин като Redirection – Аз лично не го харесах много, защото няма опция да се изключи автоматичното пренасочване към началната страница когато се отвори страница която не е намерена, но от друга страна той има поддръжка за регулярни изрази, което би направило по-лесно пренасочването на счупените линкове.

Освен тези неща – widget-a за избиране на език няма готово стилизиране – както можете да видите в сайдбар-а в момента текста не е правилно подреден със знамената за всеки език, но тъй като не смятам това за голям проблем ще отложа решаването му за малко. Най-вероятно ще намеря време за него тези дни, но не е сигурно.

Още едно нещо, което за малко да забравя – статистиките(долу-горе) за работата на плъгина в сравнение с qTranslate – честно казано, повечето от цифрите не са много по-ниски, но тъй като сайта ми е сравнително малък, не затрудняваше много qTranslate. Направих по два записа на производителността със qTranslate on и два записа със Multilingual WP – по един автоматичен и един ръчен(разликата е дали сам избирам кои адреси да отворя по време на проверката, или плъгина сам решава).

По-долу са резултатите само от автоматичните записи, тъй като изглеждаше че те са записали повече страници, от ръчните записи(може би плъгина не работи особено точно винаги).

С qTranslate:

WordPress Plugin Profile Report
===========================================
Report date: June 6, 2013
Theme name: Moon Watch
Pages browsed: 3
Avg. load time: 1.8621 sec
Number of plugins: 19
Plugin impact: 82.56% of load time
Avg. plugin time: 1.5373 sec
Avg. core time: 0.1272 sec
Avg. theme time: 0.0281 sec
Avg. mem usage: 137.17 MB
Avg. ticks: 158,059
Avg. db queries : 52.67
Margin of error : 0.1695 sec

Plugin list:
===========================================
P3 (Plugin Performance Profiler) – 0.0017 sec – 0.11%
qTranslate Separate Comments – 0.0451 sec – 2.93%
qTranslate – 0.8806 sec – 57.28%
Other(13 plugins) – 0.6097 sec – 39.68%

Plugin impact with qTranslate

 

С Multilingual WP:

WordPress Plugin Profile Report
===========================================
Report date: June 6, 2013
Theme name: Moon Watch
Pages browsed: 5
Avg. load time: 0.7518 sec
Number of plugins: 18
Plugin impact: 79.91% of load time
Avg. plugin time: 0.6008 sec
Avg. core time: 0.1270 sec
Avg. theme time: 0.0129 sec
Avg. mem usage: 58.95 MB
Avg. ticks: 14,781
Avg. db queries : 82.60
Margin of error : 0.0111 sec

Plugin list:
===========================================
P3 (Plugin Performance Profiler) – 0.0023 sec – 0.38%
Multilingual Wp – 0.1557 sec – 25.92%
Other(16 plugins) – 0.4426 sec – 73.7%

Plugin impact with Multilingual WP

 

Резултатите са приблизителни, тъй като за по-точни резултати трябваше да направя повече тестове за повече страници, но мисля че част информацията която дават е доста красноречива.

За тестовете използвах плъгина P3 (Plugin Performance Profiler) – според мен един страхотен инструмент за разработчици на плъгини(и не само) – не съм сигурен колко точен е в изчисленията които прави, но изглежда доста добре

 

Ами, това е всичко за сега – чувствайте се свободни да пробвате бета версията на плъгина, която можете да изтеглите от GitHub и ми пожелайте късмет с по-скорошното пускане на плъгина за масова употреба!

 

Multilingual WordPress

Multilingual WordPress – това е името на плъгин-а за WordPress по който работя в момента. Този плъгин ще дава възможност на хората ползващи WordPress да създават многоезични версии на съдържанието на сайта им.

Идеята се роди, след като на няколко пъти след като излизаха нови версии на WordPress, qTranslate(това е плъгина който ползвам в момента на писането на този пост за да постигна същата цел) се чупеше по нов странен начин. Автора на този плъгин няма изключително голяма възможност да го поддържа в момента и за това реших да направя нов плъгин, почвайки от нулата, но стараейки се да използвам основно вградени функции на WordPress, за да постигна максимална съвместимост с бъдещите му версии.

Самия проект го почнах към средата на ноември 2012, но поради многото работа и някои лични ангажименти, нямах възможност да работя по него изключително много. В края на февруари обаче най-накрая успях отново да възобновя работата по проекта си и постигнах що-годе значителен напредък

До момента плъгина се държи прилично в изпитателна среда и може да прави следните неща:

  • Поддръжка на неопределен брой езици(добавянето на нови езици е много лесно)
  • Добавяне на отделни текстови редактори(за всеки език) към всички избрани пост-типове(страници/публикации/тн)
  • Различен адрес(URL) за всеки език – освен частта която определя езика, всяка страниця може да има различен “slug” за всеки език – за целта ако ползвате qTranslate, ще имате нужда и от допълнителния плъгин “Qtranslate Slug
  • Различни коментари за всеки език(всеки коментар автоматично се показва само на езика на който е бил написан) – отново ако ползвате qTranslate, ще ви трябва плъгина “qTranslate Separate Comments
  • Бързи кодове, стил qTranslate – “[ :bg]съдържание на български[ :en]съдържание на английски”, както и “[ bg]съдържание на български[ /bg][ en]съдържание на английски[ /en]” и “[ mlwp langs=”bg,en”]Съдържание на български и английски[ /mlwp]”
  • И други дребни неща

Естествено има още време докато плъгина стане достатъчно добре развит и тестван за да бъде публично достъпен на WordPress.org . До тогава ако имате интерес можете да следите проекта в GitHub.

Сватбения Сайт

Аз и Коджи в момента живеем в Истанбул – тя учи в един университет тук – и тъй като повечето от гостите на сватбата ни живеят в България, а някои в САЩ, изпращането на поканите по пощата би било неефикасно и бавно. За това решихме да направим онлайн покани. Първоначално потърсихме за вече готов решение, но не успяхме да намерим нищо което да ни хареса.

Тъй като имам стабилен опит с WordPress, реших че можем да направим WordPress сайт, който да служи като програма за управление на гостите и поканите.

След това естествено дойде частта с дизайна. Честно казано не съм много добър в създаването на цялостен дизайн за каквото и да е(въпреки че не съм го правил до сега, съм сигурен че няма да се получи кой-знае какво). Така че се замислихме за наши познати дизайнери и за щастие Коджи има приятелка, която се занимава точно с това. Тя също така беше един от първите хора, които разбраха за сватбата. Така че я питахме, дали би искала да направи дизайна за сватбените ни покани. Тя се съгласи и ние и изпратихме няколко примера на неща които харесваме, както и някои идеи които имахме към момента. След седмица/седмица и нещо(тя работеше по поканите в свободното си време, така че това беше доста бързо – нещо което ние много оценяваме! ), тя ни изпрати готовия дизайн. След като го получихме, просто нямахме думи, защото беше наистина много много красив и ние просто се влюбихме в него.

След това дойде моята част – тъй като дизайна използваше основно нестандартни фонтове, аз оставих само динамичния текст(например имената на гостите и отговорите на поканата) истински текст, а за останалото направих няколко цели изображения, използвани като фон на различните елементи.

След като направих основната част, се погрижих за няколко по-дребни детайли. Като например добавянето на анимация докато всички елементи се заредят(изтеглят), която след това изчезва и на нейно място се появява поканата. Също така направих така че отговора да се запазва с AJAX(без страницата да се презарежда).

Тук по принцип има още малко технически подробности, ама те са само в английската версия

Ето и няколко снимки на самата покана:

Invitation - loading

Invitation - main

Invitation - response saved

И на края, но не на последно място отново изразявам благодарността си на Мария – дизайнерката на поканите

Custom Пермалинкове за йерархични таксономии

Заглавието е доста общо, но дава някаква идея за какво иде реч. Като цяло пермалинковете на WordPress са доста гъвкави, обаче си имат и своите ограничения. Съвсем на скоро докато работех по проекта на един клиент се натъкнах на едно от тях.

Проекта беше за създаване на база за Често Задавани Въпроси, използвайки WordPress. Клиента искаше следната структура за базата(това е опростена версия):

  • Индекс на базата ( http://example.com/faq/ ) [Индекс на цялата база]
    • Основна категория ( http://example.com/faq/category/ ) [Индекс на Основната категория]
      • Публикация в основната категория ( http://example.com/faq/category/post-1-slug/ ) [Преглед на Публикация 1]
      • Под-категория ( http://example.com/faq/category/sub-category/ ) [Индекс на под-категорията]
        • Публикация в под-категорията ( http://example.com/faq/category/sub-category/post-2-slug/ ) [Преглед на Публикация 2]
    • Друга основна категория ( http://example.com/faq/another-category/ ) [Индекс на другата основна категория]

Всичко изглежда нормално(като структура на линковете) за нормалния потребител, обаче WordPress е на друго мнение по въпроса Вместо линк като http://example.com/faq/category/  ние ще можем да видим индекса на основната категория на линк от рода на http://example.com/faq-category/category/. Което както виждате не съвпада съвсем с първоначалната идея. За да оправим този проблем трябва да прибегнем до добавянето на няколко специално написани Permalink правила и функции.

Първата стъпка е да регистрираме новия пост тип(Custom Post Type). Това се случва със следната функция:

Този код ще регистрира новия пост тип, заедно с новата таксономия “FAQ Categories”, която ще използваме за да категоризираме въпросите.

След като регистрираме новия пост тип остава да добавим две функции които да направят така че Permalink-овете да работят както искаме ние

В горния код регистрираме две функции – register_faq_rewrite_rules() и fix_faq_subcategory_query().

Първата функция добавя следните няколко правила:

  • faq/([^/]+)/?$ – това правило ще бъде приложено когато адреса на страницата която се зарежда прилича на “faq/any-character/” – тоест когато имаме начална част “faq/” последвана от всякаква комбинация от символи, без “/”( “([^/]+)” ), евентуално последвана от “/”( “/?” ). Също така тази част трябва да е последната част от адреса на страницата, за да има съвпадение(т.е. няма да има съвпадение, ако адреса е “faq/any-character/something”).

    Когато адреса съвпадне, на текущата страница ще бъде показан архив за категорията(според примера който дадох по-горе) “any-character”.

  • faq/([^/]+)/([^/]+)/?$ – това правило е почти същото като предишното, с изключение на това че вече адреса който би съвпаднал би изглеждал като “faq/any-character/post-slug/”.

    Това ще зареди публикация с кратко име(slug) “post-slug” от категорията за ЧЗВ с кратко име “any-character”.

  • faq/([^/]+)/([^/]+)/([^/]+)/?$ – това правило е почти същото като предишното, с изключение на това че вече адреса който би съвпаднал би изглеждал като “faq/any-character/sub-category/post-slug/”.

    Това ще зареди публикация с кратко име(slug) “post-slug” от категорията за ЧЗВ с кратко име “sub-category”.

Втората функция от друга страна оправя проблема със под-категориите. А самият проблем се състои в това, че когато се опитате да заредите страница с адрес faq/category/child-category/, WordPress ще се опита да зареди публикация с кратко име “child-category” вместо под-категорията с кратко име “child-category”. Самата функция е по всяка вероятност не най-красивото решение на проблема, най-малкото защото трябва да направим една допълнителна заявка към базата данни, но това е единствения начин по който успях да реша проблема Понеже функцията проверява дали има публикации с краткото име “child-category”, ако случайно има такава публикация, може да получите неочаквани резултати

Това е достатъчно за да подкарате секцията за ЧЗВ, обаче в момента ако искате да използвате пълноценно новите адреси на категориите и публикациите, ще трябва да си ги пишете сами. Това е защото WordPress не знае как трябва да генерира линковете така че да съвпадат с нашата идея. За това добавяме още няколко функции:

Горните функции “филтрират” резултата от две вградени в WordPress функции, които се грижат да създадат правилните линкове за всички страници, публикации и архиви на таксономии.

Остава един проблем, който може да не е никак малък за някои потребители – проблема с дубликиращото се съдържание. Има доста голяма вероятност Google или някоя друга търсачка която обхожда сайта ви да не остане очарована от факта, че намира идентично съдържание на два различни адреса(например faq-item/post-2-slug/ и faq/category/sub-category/post-2-slug/). Това може да се избегне с една функция която да препраща потребителите към правилния адрес, но оставям това на вас

Ако искате да видите цялата идея в действите, можете да отидете на Custom Permalinks Test.

Промяна #16

Както споменах в предния пост – “очаквайте още нови неща тея дни”. И ето, че се появи новия панел със бутони за споделяни

Задвижван само и изцяло от CSS3(пак за тези които не ползват браузъри, които да поддържат CSS3 – сори :)), елегантен, не-натрапващ се и в същото време лесно достъпен.

Първоначално смятах да го анимирам с jQuery(JavaScript библиотека), обаче в последствие реших да се възползвам(пък и да проверя) предимствата на CSS3. Оказа се че в общи линии анимациите стават изключително лесно което е голям плюс.

Ето кода който зарежда бутоните:


<div id="mw_custom_sharing"></div>
// функцията която зарежда самите бутони - във functions.php
function render_floating_social_buttons() {
$url = urlencode(curPageURL()); ?&gt; // тук се взима и енкоудва URL-то на сегащната страница
<div id="fb-root"></div>
<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>

<div class="alignleft fb-share-btn"><a type="box_count" name="fb_share"></a></div>

&nbsp;

<div class="alignleft google-plusone"></div>

<script type="text/javascript">// <![CDATA[
(function() {
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();

// ]]></script>
<a class="twitter-share-button" href="http://twitter.com/share" data-count="vertical">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
<?php }

И съответно CSS-a :

 #mw_custom_sharing { width: 70px; height: 40px; overflow: hidden; padding: 15px 15px 15px 0; position: fixed; left: -75px; top: 130px; z-index: 100; -webkit-border-radius: 0 10px 10px 0; -moz-border-radius: 0 10px 10px 0; border-radius: 0 10px 10px 0; -webkit-transition: all 500ms ease-in-out; -moz-transition: all 500ms ease-in-out; -o-transition: all 500ms ease-in-out; transition: all 500ms ease-in-out; background: url(images/background.gif) repeat 0 0; } #mw_custom_sharing:hover { left: 0; height: auto; min-height: 330px !important; } /* това селектира всички елементи, които са директни наследници на #mw_custom_sharing, и не са script елемент И нямат id="fb-root" */ #mw_custom_sharing --> *:not(script):not(#fb-root) {
padding-bottom: 15px;
margin: 0 auto 15px auto !important;
text-align: center;
border-bottom: 1px solid #ccc;
width: 70px;
display: block;
}
/* за FB Share бутона трябва малко по-специфичен стил, за да се центрира */
#mw_custom_sharing .fb-share-btn .fb_share_count_wrapper { float: none; text-align: center; }

/* Това избира последните два директни наследника на #mw_custom_sharing, които не са script елемент и ...
Селектирам последните два, защото знам че почти винаги последния елемент е script */
body #mw_custom_sharing > :nth-last-child(-n+2):not(script):not(#fb-root) {
padding-bottom: 0 !important;
margin: 0 auto 0 auto !important;
border-bottom: none !important;
} 

Промени бяха направени по следните файлове:

  • header.php
  • functions.php
  • style.css

Линк към ревизията: Цък

Малко освежаване :)

Иии след като се преместих на новия домейн, нещо ме позасърбяха ръцете(пък и според Google Analytics, посещенията през последната седмица са нараснали леко :)) ) и реших да почовъркам пак малко темата.

В общи линии това което се промени за посетителите са дребни детайли по дизайна – заоблени ръбове и елегантни сенки

Това което обаче не се вижда с първото посещение е, че сенките променят цвета си според часа от денонощието. Като цяло съм го разделил на 4 части – нощ(24-6), сутрин(6-12), ден(12-18) и вечер(18-24), като през всяка от четирите части цвета на сенките е различен.

ПП: Ако сте от онзи процент хора, които използват стар браузър(IE8 или по-стар, Firefox под 3.5, за другите не съм сигурен ) има доста голям шанс да не виждате гореспоменатите закръглени ръбове и сенки. Ако е така – просто си обновете браузъра – най-малкото ще имате по-приятно браузване

Yellow-Orange Flower

Нов домейн!

Иии най-накрая се хванах и си взех още един хостинг + домейн
За съжаление moonwatch.com е вече зает, ама и този си ми харесва

Що се отнася до SuperHosting.bg – супер бързо се случиха нещата както винаги Лятната им промоция(1 = 2) е повече от иделна – сносен хостинг(за лично ползване) за 3 години + домейн за една година = 102.75 лв. – което си е повече от без пари(хостинга е 84, което делено на 3 прави 28 лв на година, или 2.33 лв на месец!)…

Ако си търсите хостинг – мога спокойно да ви ги препоръчам

Стига толкова реклама за хостинг компанията, сега малко детайли покрай местенето

Ако пробвате да отворите някой линк от стария сайт, ще се озовете на същата страница, само че на новия – това стана с буквално 18 реда код :)))

Оставих активната тема на стария сайт свалена до минимум(index.php – празен, style.css – само описанието на темата, functions.php – само функцията за пренасочване) с цел пренасочването да се случва възможно най-бързо.

Самото местене на файловете стана доста бързо, благодарение на любимия ми cPanel, който поддържа архивиране/разархивиране на архивни файлове. Тоест, вместо да свалям при мен и да качвам на новия сървър 1000+ файла, свалих 1 който после разархивирах тук

Export на базата данни, няколко SQL заявки след import-a на новия сървър и все едно нищо не се е случило

Така, ето и функциите за пренасочване и с това ще приключа за тази вечер

function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
return $pageURL;
}

function redirect_to_new_domain() {
$requested = curPageURL();
wp_redirect(str_replace('moonwatch.kbsk-titanite.com', 'themoonwatch.com', $requested), 301);
exit;
}
add_action('init', 'redirect_to_new_domain', 1);