Пренаписване на URL адреси в WordPress съвети и приставки
Най-новите актуализации на WordPress позволиха на разработчиците бързо да персонализират личния си уебсайт. Лесно е да се актуализират областите на вашата тема, да се заменят джаджи в страничната лента и дори да се напишат собствени функции на PHP код. Широчината е огромна - и една област на популярност е пренаписване на доста постоянни URL адреси.
Има няколко метода, които можете да използвате, за да обновите системата за презаписване по подразбиране на WordPress. В този урок ще споделя няколко примера и ще покажа колко прост може да бъде този процес. Ще ви е необходимо известно разбиране на PHP, за да следите какво се случва в кода, но е толкова лесно да копирате и поставяте в собствения си шаблон, практически няма работа.
Разбиране на WP_Rewrite
Ако изобщо сте запознати с mod_rewrite на Apache сървърите, тогава ще вземете синтаксиса за презапис на WordPress. Тяхната система все още е изградена на върха на .Htaccess файл, но всички правила са кодирани в PHP. Това всъщност прави процеса малко по-лесен, тъй като имаме по-голям контрол върху писането на собствени URL адреси.
Препоръчвам ви да спрете страницата на класа $ wp_rewrite, тъй като има много информация за темата. Има дори малки примери, които можем да споменем, за да направим всичко по-лесно за разбиране. По-голямата част от кода може да бъде написана директно във вашата тема functions.php файл. Нека започнем с разглеждане на презаписаните по подразбиране вече включени в WordPress.
Съдържание на $ wp_rewrite-> правила
Чрез обявяване на $ wp_rewrite
клас като глобален имаме достъп до всички вътрешни данни. Когато добавите свои собствени правила, те се добавят в масив с името $ Wp_rewrite-> правила
. Важно е да запомните тази променлива, тъй като вероятно ще трябва да се позовавате на данните многократно по време на разработката.
правила); ?>
Аз добавих този блок код в моята тема page.php файл. Той ще изведе голям масив от данни, който изглежда като голяма бъркотия. Но ако вие Виж източника на вашата страница всъщност е лесно да видите кои правила за пренаписване са съпоставени с кои имена на файлове. Например нека разгледаме правилата за пренаписване на категории:
[category /(.+?)/?$] => index.php? category_name = $ съответства [1]
Битът от лявата страна в скобите е нашият Apache RewriteRule за търсене. Започвайки от раздела / Категория / последван от всеки низ от символи. Ако това е съвпадение, сървърът знае за справка index.php? CATEGORY_NAME =
като замени променливата на края.
Настройване на персонализирани препратки
Само в класа $ wp_rewrite има толкова много съдържание. Много други свойства могат да бъдат споменати, като например $ Wp_rewrite-> category_base
или $ Wp_rewrite-> author_base
за изтегляне на структурите по подразбиране за тези страници. Но като изключим настройките по подразбиране на WP, можем да изградим и собствени правила.
Възстановяване на базата на автора
Когато влезете в страницата с настройки за Permalinks, имате опцията за нулиране на категории и етикети. Възможно е обаче опцията за нулиране на базата за автор да е странно липсваща.
Но можем да използваме add_rewrite_rule ()
от кодекс на WordPress за интегриране на някои нови настройки. В този случай съм заменил / Автор / с / Писател / но можеш да използваш каквато база искаш. Освен това копирах някои от другите пренасочвания за страници на автора и RSS емисии. Можете да добавите този блок код във файла functions.php на вашата тема.
add_action ('init', 'add_author_rules'); функция add_author_rules () add_rewrite_rule ("писател / ([^ /] +) /?", "index.php? author_name = $ съответства [1]", "top"); add_rewrite_rule ("писател / ([^ /] +) / страница /? ([0-9] 1,) /?", "index.php? author_name = $ съответства [1] & paged = $ съответства [2] ", "връх"); add_rewrite_rule ("writer / ([^ /] +) / (емисия | rdf | rss | rss2 | atom) /?", "index.php? author_name = $ съответства [1] & feed = $ съответства [2]", " връх"); add_rewrite_rule ("писател / ([^ /] +) / емисия / (емисия | rdf | rss | rss2 | atom) /?", "index.php? author_name = $ съответства [1] & feed = $ съответства [2]" , "връх");
Тази функция може да бъде достъпна дори без да се използва променливата $ wp_rewrite. Някои разработчици харесват този метод, защото е по-лесно от твърдото кодиране със свойствата на класа. Все пак забелязах, че този метод не винаги е надежден за някои инсталации на WordPress. Всъщност има втора опция за добавяне на тези правила на куката след изчистване на .htaccess (вж. По-долу).
Автор на базата използваши generate_rewrite_rules
За да напишете този метод, отново ще се нуждаете от глобалния клас $ wp_rewrite. След това създадох нова променлива с име $ new_rules
който съдържа асоциативен масив от данни. Моят пример код по-долу просто пренаписва за основния раздел страница автор.
функция generate_author_rewrite_rules () глобална $ wp_rewrite; $ new_rules = array ("writer / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> правила;
Но ако искаме да включим няколко страници и RSS емисии, можем да увеличим масива. Имате възможност да създадете PHP функция, за да променяте асоциативните масиви, които може да са твърде сложни. Можем също така да разделим блоковете данни чрез запетаи, като се държим като отделни единици в масива. Проверете моя актуализиран код отново написан във файла theme.php.
функция generate_author_rewrite_rules () глобална $ wp_rewrite; $ new_rules = array ("writer / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1), "писател / ([^ /] +) / страница /? ([0-9] 1,) /? "=>" Index.php? Author_name = ". $ Wp_rewrite-> preg_index (1)." & Paged = ". $ Wp_rewrite-> preg_index (2), "писател / ([^ /] +) / (емисия | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2), "писател / ([^ /] +) / feed / (емисия | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite- > preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> правила;
Само не забравяйте, че нито един от тези методи няма да работи, докато не изчистите оригиналните правила за пренаписване. Вие ще трябва да направите това всеки път, когато правите промени в тези функции, но след това новите правила ще се задържат за неопределено време.
Изтриване на правилата за пренаписване
Всеки път, когато правите актуализация на кода за презапис на URL, промените не се прилагат незабавно. Трябва да изтриете правилата за пренаписване .htaccess, така че вашият нов код да бъде добавен. Извършването на това на всяка страница init е изключително разточително, тъй като записва в базата данни и твърдо опреснява .htaccess файла.
По-добрият метод е да влезете в страницата си в администраторския панел и да запишете промените отново. Това винаги се нарича flush_rewrite_rules, така че никога не трябва да се притеснявате за потребителите в интерфейса, които изпитват проблеми с натоварването. Нужно е само веднъж да запазите отново страницата и да актуализирате всички правила във вашата система. Но ако това не работи, можете да опитате да се обадите $ Wp_rewrite-> flush_rules ();
Използване на правила, които не са WP
Вътре $ wp_rewrite
клас имаме достъп до десетки имоти. Един от най-важните варианти е $ Wp_rewrite-> non_wp_rules
, която събира масив от пренасочвания, които не попадат в index.php файла.
Това всъщност се използва най-често в разработката на WordPress. Можете да натиснете конкретен тип потребителски URL адрес (например / Календар / а Юни-2012 /
) в бекенда на уебсайта Ви ()/wp-content/plugins/calendarplug/myscript.php
). Разбира се, има и други приложения за този асоциативен масив от правила за пренаписване, различни от приставки. Представих отличен пример в контекста по-долу.
Маскиране на файловете с теми
Това е често срещано предложение, което виждам често в WordPress дискусионни табла. В идеалния случай бихме искали да споменем някои файлове в / WP-съдържание / теми / mytheme /
папка с по-елегантен URL адрес. Забележете, че това ще изисква различен набор от презаписвания на WordPress, за да се промени структурата на директориите.
Вътрешната система за пренаписване на WordPress винаги изтласква съдържанието към един единствен маршрутизиращ файл. В случая по подразбиране ние използваме index.php заедно с всички допълнителни данни от низа на заявка. Но за да скриете стандартната ни директория за шаблони (/ WP-съдържание / теми / mytheme / *
) ще трябва да покажем много различни файлове.
add_action ('generate_rewrite_rules', 'themes_dir_add_rewrites'); функция themes_dir_add_rewrites () $ theme_name = next (експлодира ('/ themes /', get_stylesheet_directory ())); global $ wp_rewrite; $ new_non_wp_rules = array ('css /(.*)' => 'wp-content / themes /'. $ theme_name. '/ css / $ 1', 'js /(.*)' => 'wp-content / themes / '. $ theme_name.' / js / $ 1 ',' images / wordpress-urls-rewrite /(.*) '=>' wp-content / themes / '. $ theme_name.' / images / wordpress-urls-rewrite / $ 1 ',); $ wp_rewrite-> non_wp_rules + = $ new_non_wp_rules;
Написах нова функция themes_dir_add_rewrites ()
да изтеглите цялото основно съдържание от тези по-дълги URL адреси и да ги пренасочите в бекенда. Забележете, че използваме това друго мистериозно свойство на $ wp_rewrite име non_wp_rules
. Според документите, това са правила, които не се насочват към файла index.php на WP и ще бъдат обработвани на края на сървъра..
Това, което е толкова голямо в тези правила, които не са WP, е, че все още можете лесно да управлявате по-стария метод на URL адрес. Няма нищо, което да ви попречи да се свържете с:
/wp-content/themes/mytheme/images/wordpress-urls-rewrite/logo.jpg
.
Но изглежда много по-хубаво, ако можете да споменете:
/images/wordpress-urls-rewrite/logo.jpg
вместо.
Полезни инструменти и приставки
Има само няколко инструмента, които можете да използвате, ако сте останали с кодиране на собствени красиви URL адреси. Процесът е много труден за разбиране, така че не се обезсърчавайте, ако се борите за няколко седмици. Чувствам, че съдържанието ще стане по-лесно, докато прекарвате повече време в практикуване.
Но за да започнете, проверете някои от тези удобни инструменти за пренаписване и приставки. Вероятно няма да ви трябват всички, но е чудесно да откриете такава голяма база от разработчици, която работи около пренаписването на WP.
Monkeyman Rewrite Analyzer
При първото прескачане на правилата за пренаписване този плъгин е задължителен. Това всъщност не променя нито едно от правилата за вашия сайт - просто ви позволява да тествате кода и да видите кои пренасочвания отиват на кои страници. Той дори ще работи за тестване на потребителски променливи за заявки за всякакви видове персонализирани публикации.
Визуализация на AskApache RewriteRules
Това е подобно на приставката по-горе, но не ви позволява да тествате собствените си правила. Вместо това този плъгин ще покаже всички правила на WP по подразбиране на Вашия уебсайт и къде те пренасочват. Това ще включва всички основни свойства на $ wp_rewrite
като настройките за постоянна връзка и базите на страница / категория / тагове.
WP htaccess контрол
Тук имате различен набор от правила за пренасочване на нови страници. Приставката има свой администраторски панел, където можете да редактирате променливи, като базата на автора, базите ви, и дори да добавите свои собствени .htaccess правила..
Този метод е различен в сравнение с изграждането на вашето собствено използване на wp_rewrite. Въпреки това може да бъде по-лесно за техничари, които наистина знаят уеб сървъри и се чувстват по-удобно да пишат директно в .htaccess.
Тест за пренаписване на правила
Това всъщност не е WordPress плъгин, но определено е един удобен инструмент за поддържане на файла. Можете да копирате правила за пренаписване и да ги тествате за уебсайта си, без да редактирате своя .htaccess файл. Това е идеалният метод за премахване на грешки от синтаксиса ви преди стартиране на живо в мрежата.
DW ReWrite
DW Rewrite е много прост плъгин, който създава 3 уникални красиви URL адреса веднага след инсталацията. По подразбиране ще се променят връзките за администратор, вход и регистрация / администратор
, /Влизам
, и /регистрирам
съответно.
Това може да бъде чудесно, ако имате нужда от бързо решение за блог, който включва няколко автора. Тя ще скрие специално неудобно сложната връзка за регистрация в WordPress (/wp-login.php?action=register
).
заключение
Надявам се, че този урок може да даде някои примери, за да ви накара да мислите за презапис на WordPress. CMS е много популярна и разработчиците все още произвеждат нови функции всеки ден. Персонализирането на собствените си URL адреси е толкова огромна част от потребителската функционалност. Тя дава на Вашия сайт уникално присъствие и брандинг в сравнение с опциите по подразбиране.
Ако имате проблеми с правилата за пренаписване, никога няма да е трудно да се отмени повредата. Като просто изтриете кода на функцията и изтриете вашите .htaccess правила, изглежда, че нищо не се е променило. Не забравяйте да проверите някои други подобни статии, които можете да намерите по темата. Ако имате някакви въпроси или коментари, можете да ги споделите с нас в зоната за дискусии.