В процессе разработки темы или плагина часто бывает нужно добавлять 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( '/' ) ); с завершающим слэшем. В этом случае нужны два параметра: $path, если нужно добавить ссылку на указанную страницу или добавить завершающий слеш, а также $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="<?php echo get_stylesheet_directory_uri(); ?>/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 предлагает альтернативные функции для безопасного извлечения ссылок на ту или иную страницу сайта.

Источник: code.tutsplus.com

Вам понравился материал?

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

4 комментария

сначала новые
по рейтингу сначала новые по хронологии

А как быть в таком случае с обращениями к БД? Чтобы уменьшить количество оных, как раз и используем прямые ссылки. Только в этом случае плагины и темы обновлять нельзя.

ildar r. khasanshin

*Чтобы извлечь ссылку на таблицу стилей, нужно использовать wp_register_style() и wp_enqueue_style() в функции и прикрепить ее к хуку wp_enqueue_scripts*

здесь опечатка в конце
д.б. wp_enqueue_style

Александр

Приветствую! get_term_link() не работает. В чём может быть причина?

Добрый день, подскажите, не могу разобраться, активировал мультисайт, потом создал дочерние сайты, как подкатегории:
site.ru/ru
site.ru/en
Но когда захожу на сайт меня переадресовывает на сайт со слэшем в конце
site.ru/ru/ site.ru/en/
Люди на прямую вписывают ссылки site.ru/en и после этого переадресация их перебразывает на ссылку со слэш в конце. Изза этого теряеться скорость сайта, на pingdom задержка в 3-5 секунд. Помогите. Спасибо.
p.s. Ваш сайт мой любимый