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.

2 Луни

Двете Луни

Хората са използвали фазите на Луната за да измерват времето в продължение на столетия. Мисля че днешно време този начин на отмерване на времето не е много често срещан В рамките на тази публикация ще използвам думата “Луна” в смисъла на един пълен лунен цикъл(или приблизително 29.5 дни)

2 Луни не е малко време, имайки в предвид количеството събития(включително живото променящи събития, както глобални така и лични) които могат(и СЕ) да се случат през този период. Усещам че пиша безсмислици, така че ще продължа по същество

Преди около 2 Луни, аз и моята Любов положихме основите на наистина силна духовна(или по-скоро чувствена) връзка. Нито един от двама ни имаше и на идея в какво ще се превърне тя в последствие. И двамата в общи линии се хвърлихме в една връзка, която не би се струвала удачна на повечето хора(обстоятелствата бяха малко осложнени по това време). Просто се пробвахме и оставихме чувствата си на свобода.

Това беше добро решение, дори може би най-добрия избор който и двамата сме правили някога. Научихме много един за друг още от самото начало на връзката. Прекарахме 2 трети или дори можеби повече от първата ни Луна живеейки заедно – част от времето в нейната квартира(по това време), част от времето в моята. Станахме изключително привързани един към друг, всъщност толкова привързани че към края на първата ни Луна трудно можехме да стоим разделени един от друг.

Тя имаше планове за близкото(и не толкова близко ) бъдеще, докато аз нямах никакви. Това изключително много улесни вписването ми в нейните планове. Тя щеше да се мести в Истанбул в началото на Септември за да продължи висшето си образование в най-добрия университет в Турция. Така че първоначално идеята ми беше да прекарвам половината от времето си тук във Варна и другата половина в Истанбул. Но както споменах преди малко към края на първата ни Луна ни беше доста трудно да не сме заедно.

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

Сега вече си имаме и наше собствено място в Истанбул – не особено голямо, може би не перфектно, но удобно и наше.

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

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

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

Благодаря ти Любов, за това че споделяш живота и любовта си с мен!

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