У процесі розробки теми або плагіна часто потрібно додавати URL в код. Наприклад, у плагіні може знадобитися посилання таблицю, а темі – URL у хедері сайту.
Але в цих випадках не варто використовувати URL так само, як і на статичному сайті. Не варто вставляти повні посилання в код, який починається з http://. І з сьогоднішнього керівництва ви дізнаєтеся чому, а також дізнаєтеся, які функції краще використовувати для цього.
Дивіться також:
Чому не потрібно використовувати прямі URL-адреси в темах і плагінах
Почнемо з тим. При розробці теми для конкретного сайту може здатися, що додавання посилання домену сайту в файли теми ні на що не вплине, хоча насправді в цьому є свої істотні мінуси. Потрібно редагувати та змінювати всі жорстко запрограмовані URL-адреси:
- для зміни адреси домену
- для переміщення сайту після розробки на live-server
- для релізу теми у публічному доступі або під час використання її іншими розробниками
- при використанні теми як основа для іншої теми
Коли сайт знаходиться в піддиректорії кореневого каталогу, але WordPress використовує кореневу директорію для URL-адреси, то жорстко запрограмовані URL-адреси можуть вказувати на неправильне розташування. Якщо ж не редагувати адреси у вищевказаних випадках, посилання не працюватимуть.
У випадку з плагінами ще більш ризиковано використовувати URL-адреси звичним чином, тому що на відміну від плагінів будуть використовуватися для багатьох сайтів. Малоймовірно звичайно, що ви коли-небудь використовували жорстко запрограмовану URL-адресу в плагіні, але вам може захотітися використовувати функцію для отримання адреси сайту і потім змінити шлях до директорії плагіна.
Але знову таки, є ймовірність того, що посилання перетворяться на биті:
- якщо плагін потрібно буде перенести в інший каталог, у цьому випадку будь-яке посилання перетвориться на биту
- якщо плагін встановити на сайті, який знаходиться на мультисайтовій платформі та використовує стару версію WordPress
- якщо плагін встановити на сайті, який використовує структуру директорій, відмінну від тієї, яку ви використовуєте для URL-адреси
Може статися так, що плагін взагалі перестане працювати.
Так що ж робити, щоб уникнути використання прямих URL-адрес на WordPress?
Функції, що замінюють вставку повних URL-адрес на WordPress
Існує досить багато функцій, які можна використовувати, щоб уникнути жорсткого використання URL-адрес на WordPress. Їх можна розподілити на п'ять категорій:
- функції для отримання стартової сторінки сайту
- функції для вилучення інших фронтенд посилань (включаючи записи, сторінки, вкладення та архіви)
- функції для вилучення URL-адрес для панелі адміністратора
- функції для вилучення URL-адрес для файлів у плагіні та директоріях тем
- функції для вилучення CSS таблиць та JS скриптів
Почнемо з функцій для отримання посилання на стартову сторінку.
Вилучення URL-адреси домашньої сторінки
Наступні функції допоможуть отримати URL-адресу домашньої сторінки вашого сайту:
- bloginfo( 'url' ) — відображає посилання на стартову сторінку, як зазначено у налаштуваннях адмінки
- get_bloginfo( 'url' ) — витягує URL-адресу сайту без її відображення
- home_url() - Витягує посилання на домашню сторінку без її відображення. Щоб відобразити її, використовуйте echo esc_url(home_url('/')); із завершальним слешем. В цьому випадку потрібні два параметри: $шлях, якщо потрібно додати посилання на вказану сторінку або додати завершальний слєш, а також $scheme для уточнення схеми URL-адреси (http, https та relative)
- get_home_url() — Виймає URL-адресу домашньої сторінки та підтримує мультисайт: можна ввімкнути ID блогу як параметр.
- site_url() - Вказує посилання на розташування сайту WordPress. Якщо ваша установка WordPress знаходиться в піддиректорії, посилання на нього буде виглядати наступним чином http://mysite.com/wordpress
- get_site_url() - Витягує посилання на сайт, але не виводить її. Цей тег також може використовуватися з параметрами для виведення URL сайту на мультисайтовій платформі з використанням певної схеми
- network_home_url() - Витягує посилання на основного сайту на мультисайтовій платформі. Функція буде корисна, якщо потрібно додати посилання до основного сайту у футер кожного сайту
- network_site_url() — Витягує URL-адресу основного сайту в мультисайтовій мережі
Можна використовувати одну з цих функцій для отримання посилання на стартову сторінку в активній темі (або плагіні), наприклад, якщо логотип сайту веде на неї.
Вилучення інших URL з фронтенду
Крім посилань на стартову сторінку сайту, може виникнути необхідність закодувати посилання і на інші сторінки сайту. Наприклад, сторінки, записи, вкладення або типи постів користувача. Для цього варто використовувати такі функції:
- post_permalink() — виводить посилання на запис із зазначенням ID сторінки як параметр
- get_page_link() — витягує, але не виводить постійне посилання на сторінку з ID сторінки як параметр
- get_category_link() — витягує посилання на архів категорії із зазначенням ID категорії як параметр
- get_tag_link() — витягує URL-адресу на архівну сторінку тега разом з ID як параметр
- get_post_type_archive_link() — витягує посилання на архів запису з типом посту як параметр
- get_term_link() - Витягує посилання на таксономію термів і як параметр використовує таксономію
- the_attachment_link() — виводить посилання на вкладення із зазначенням ID як параметр. Щоб визначити розмір зображення, і чи веде посилання сам файл чи сторінку вкладення, необхідно використовувати інші параметри
- get_attachment_link() — витягує URL-адресу на медіа-вкладення, використовуючи ID вкладення як параметр
- wp_get_attachment_link() — також витягує посилання на вкладення та додатково дозволяє вивести зображення у заданому розмірі, якщо вкладення є зображенням
- get_search_link() - Витягує посилання на сторінку пошуку. Можна визначити запит як параметр, або залишити як є. Тоді буде використано поточний запит
Вилучення URL-адміністрації в адмін-частині
Під час створення плагіна або теми з панеллю керування в адмінці WordPress може знадобитися посилання на неї.
Знову ж таки, не потрібно використовувати повні URL, а краще використовувати одну з функцій:
- admin_url() - Витягує (але не виводить) URL в адмінці. Потрібно вказати шлях до URL як параметра і за необхідності включити схему. Наприклад, щоб вивести на екран URL для створення нового запису, необхідно використовувати echo admin_url('post-new.php');
- get_admin_url() - схожий на admin_url(), але підтримує мультисайти: можна вказати ID блогу як параметр
- edit_post_link() — Показує посилання на редагування сторінки запису. Можна використовувати в циклі або поза циклом із зазначенням ID як параметр
- get_edit_post_link() — Витягує URL-адресу для редагування запису, використовуючи ID запису як параметр
Вилучення URL-файлів у папках плагінів і тем
Розглянемо функції для файлів тим:
- get_stylesheet_directory() - Витягує абсолютний шлях для активної директорії теми. Найчастіше використовується для увімкнення файлів, а не для виведення посилань.
- get_stylesheet_directory_uri() — Виймає URL-адресу нещодавно активованої теми без завершального слеша. Він використовується у файлах шаблону для отримання ресурсів, що знаходяться в папці теми. Наприклад, щоб вивести зображення з папки теми, потрібно використовувати
<img src=" /images/logo.jpg"> - get_bloginfo( 'stylesheet_directory' ) — Виймає URL-адресу на нещодавно активовану тему. Найкраще використовувати get_stylesheet_directory_uri()
- get_template_directory_uri() - схожий на get_stylesheet_directory_uri(), але при використанні дочірньої теми він витягне посилання на батьківську тему. Так само, get_template_directory() працює як get_stylesheet_directory(), але для батьківської теми
Також є функції, які можна використовувати у файлах плагінів:
- plugins_url() - Витягує абсолютний нехай до директорії плагінів (без завершального слеша). Він включає два параметри: шлях для додавання після URL, а також плагін, на який має вести URL
- plugin_dir_url() — витягує URL-адресу на файл, який знаходиться всередині директорії
Нижче наведено приклади кожного з них. Спочатку вилучаємо URL на файл у директорії плагіна:
plugins_url( 'includes/myfile.php', __FILE__ );
А щоб витягти цю ж URL-адресу, використовуючи plugin_dir_url():
plugin_dir_url( __FILE__ ). 'includes/myfile.php' ;
Зверніть увагу, що у другому прикладі слід повторити шлях після функції. І не забудьте, що другий повертає завершальний сліш, а перший ні.
Вилучення URL-ів CSS таблиць та JS скриптів
У жодному разі не можна використовувати прямі посилання для таблиць та скриптів у файлах або плагінах. Натомість потрібно використовувати функцію і прикріпити її до правильного хуку. Так можна уникнути проблем із перенесеними файлами та переконатися, що ви використовуєте правильні скрипти без дублікатів.
Щоб отримати посилання на таблицю стилів, потрібно використовувати wp_register_style() и wp_enqueue_style() у функції та прикріпити її до хука wp_enqueue_scripts. За допомогою наведеної нижче функції можна зробити це в плагіні:
<?php function register_my_styles() { wp_register_style( 'my-styles', plugins_url( '/css/style.css', __FILE__ ) ); wp_enqueue_style( 'my-plugin' ); } add_action( 'wp_enqueue_scripts', 'register_my_styles' ); ?>
Врахуйте, що тут використаний __FILE__. Це свідчить, що шлях до таблиці належить до поточного файлу.
Те саме і зі скриптом. Тільки у функції потрібно використовувати wp_register_script() и wp_enqueue_script (), і прикріпити їх до хука wp_enqueue_scripts. Це показано на прикладі нижче:
function register_my_scripts() { wp_register_script( 'my_script', plugins_url( '/js/script.js', __FILE__ ) ); wp_enqueue_script( 'my_script' ); } add_action( 'wp_enqueue_scripts', 'register_my_scripts' );
Якщо скрипт пов'язаний з WordPress, наприклад jQuery, то не потрібно його реєструвати, а залишити його наступним чином:
function register_my_scripts() { wp_enqueue_script( 'my_script', plugins_url( '/js/script.js', __FILE__ ), 'jquery', , 'true' ); } add_action( 'wp_enqueue_scripts', 'register_my_scripts' );
Висновок
Сподіваємося, ми переконали вас не використовувати прямі URL-адреси на WordPress, оскільки це може погано закінчитися, та й не дуже ефективно. Натомість WordPress пропонує альтернативні функції для безпечного вилучення посилань на ту чи іншу сторінку сайту.
Коментарі до запису: 5
Доброго дня, підкажіть, не можу розібратися, активував мультисайт, потім створив дочірні сайти як підкатегорії:
site.ru/ua
site.ru/en
Але коли заходжу на сайт мене переадресовує на сайт зі слешем наприкінці
site.ru/ru/ site.ru/en/
Люди прямо вписують посилання site.ru/en і після цього переадресація їх перебирає на посилання зі слеш в кінці. Через це втрачається швидкість сайту, на pingdom затримка в 3-5 секунд. Допоможіть! Дякую.
ps Ваш сайт мій коханий
Вітаю! get_term_link() не працює. У чому може бути причина?
*Щоб отримати посилання на таблицю стилів, потрібно використовувати wp_register_style() та wp_enqueue_style() у функції та прикріпити її до хука wp_enqueue_scripts*
тут помилка наприкінці
д.б. wp_enqueue_style
А як бути у такому разі із зверненнями до БД? Щоб зменшити кількість цих, якраз і використовуємо прямі посилання. Тільки в цьому випадку плагіни та теми оновлювати не можна.
Всі ці функції роблять запит до бд. Підключено у вас 30 скриптів та стилів через ці функції і буде 30 запитів до бд, хай і невеликих, але запитів. В окремих випадках це потрібно, але наприклад якщо у мене блог вже достатньо часу і домен не змінюю і навіщо мені тоді таке bloginfo('charset'), то запит до бд і таких валом. і на місце того можна без будь-яких запитів прописати utf-8. Від цих функцій позбавлятися потрібно, якщо в планах немає бажання змінювати домен. Та й взагалі, замість них моно прописати в окремому файлі, в тому ж конфізі, константи. І навіть якщо змінив домен, то просто заліз у свій файл із константами і поміняв урл. Можна зробити різні константи, для домашньої, для шаблону, для директорії плагінів і таке інше. Я завжди так роблю коли вже настрою сайт, стилі та код із шаблонами. Зручно та менше запитів до бд