X
  • Дизайн та розробка сайту
  • Дизайн і створення сайтів. Розробка тем для WordPress. Створення Landing Page.
  • office@gnatkovsky.com.ua
  • @vgnat
  • Написати мені
Замовити послугу

Как получить ссылку на текущую страницу WordPress?

Приклад
  • 2024-11-21
  • 11439 переглядів

  • Дизайн та розробка сайту

Доброго времени суток. 🙂

Это небольшая статья об одном интересном моменте что относится к WordPress. Когда-то я задался вопросом о том как вывести в WordPress ссылку на текущую страницу. Казалось бы, простой вопрос для системы управления сайтом как WordPress, должно быть элементарно, но не все так просто. Сейчас рассмотрим вместе с вами, как это можно сделать используя разные варианты. Если честно, такой простой вопрос имеет традицию собирать вокруг себя шаманов с бубнами. Лично мне, не понятно почему до сих пор нет единой функции способно на то, чтобы вывести ссылку текущей страницы.

ссылку на текущую страницу WordPress

Кто то из вас, сразу же может возразить и вспомнить про функцию get_permalink(), ведь она как раз и выводит ссылку на текущую запись. Да вы правы, но в том и дело что она выводит только ссылку на запись, то бишь статью. Данная функция работает только внутри цикла записи, а значить страницы рубрики, главная, теги, архивы и тд отпадают. Нам же надо универсальная функция. Недавно я вновь столкнулся с этим вопросом, конечно же у меня были наработки, но хотелось проверить, есть ли новое решение этой задачи. Ниже я опишу все способы что я нашел, хороши ли они и каким пользуюсь я.

Проведя несколько часов в поисках и изучив данный вопрос повторно, оказалось что ничего так и не поменялось. Общего, наилучшего решения так и не было. Поэтому представляю вам то, что я нашел и мне понравилось. Начнем и с самого распространенного и довольно простого способа.

Способ №1 $_SERVER

В то место где должна появится ссылка в виде текста, просто добавьте такой код:

<?php echo bloginfo( 'url' ); echo $_SERVER['REQUEST_URI']; ?>

Он рассчитан на добавление в среду HTML, если же у вас PHP, то удалите теги PHP <?php ... ?>. Суть данного метода очень проста. Сначала мы вызываем функцию bloginfo, с параметром url - она выведет домен вашего сайта. Далее мы просто выводим массив $_SERVER, который и выводит остальной путь но без домена. В сумме эти два элемента и образовывают ссылку на текущую страницу.

Данный метод довольно прост, но используя его я обнаружил один момент, который заставил отказаться от этого способа. Если вы примените его на обычном сайте, то есть его домен будет http://site.com/ то все хорошо, но если, например у вас будет какой-то сайт, который будет расположен в папке расположенной на этом домене, то бишь путь будет, например http://site.com/sub/ то данный метод начнет ломать путь, потому как массиву $_SERVER все равно и он выводит путь исключая только домен, но не остальной путь. В итоге если ваш настоящий путь будет таким - http://site.com/sub/page.html, то данный способ выведет ссылку так - http://site.com/sub/sub/page.html. Думаю, вы поняли что в пути присутствует дублирование папки. В итоге если вы расположите какой-то тестовый сайт или еще что и попытаетесь воспользоваться данным методом, он вас подведет. Если это вам не помеха, то данный способ отлично подойдет.

Способ №2 функция

Второй способ, который мне понравился и я не нашел в нем явных проблем, это использование одной небольшой функции. Его суть проста, вам надо добавить код в файл пользовательских функций - function.php. Если не знакомы с этим файлом и не разбираетесь в его коде, то добавляете в самый конец перед закрывающим тегом PHP ?>. Если его нет, то просто в самый конец.

Перед изменением function.php, обязательно сохраните его копию, чтобы в дальнейшем, в случаи ошибки, вернуть все как было.

function page_current_url() {
	$current_url  = 'http';
	$server_https = $_SERVER["HTTPS"];
	$server_name  = $_SERVER["SERVER_NAME"];
	$server_port  = $_SERVER["SERVER_PORT"];
	$request_uri  = $_SERVER["REQUEST_URI"];
	if ($server_https == "on") $current_url .= "s";
	$current_url .= "://";
	if ($server_port != "80") $current_url .= $server_name . ":" . $server_port . $request_uri;
	else $current_url .= $server_name . $request_uri;
	return $current_url;
}

Далее в том месте где хотите увидеть ссылку в виде текста, просто вызовите функцию page_current_url(). Делается это так:

<?php echo page_current_url(); ?>

Способ рабочий, по своему интересный. Требует немного больше движений, но вполне заслуживает право на жизнь. Использовать ли его - решать вам.

Способ №3 add_query_arg

Данный способ очень часто встречается на просторах интернета, но я так и не понял почему его используют, потому как у меня он выводил совсем не то что мне нужно. Это не странно ибо он работает именно так, как он задуман, возможно его создателю нужно было так.

Его суть проста, добавляется в нужное для вас место небольшой код:

<?php			
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );
echo $current_url;
?>	

Сначала вызывается глобальная переменная, после создается новая переменная и выводится. Новая переменная задается функцией add_query_arg(). Данная функция добавляет заданные параметры GET запроса в текущий или указанный URL. В нашем случаи в текущий. Как вы понимаете тут есть текущая ссылка но к ней добавляется новый параметр запроса.

Предположим, ваша текущая страница имеет ссылку http://site.com/page_name.html, то данный метод выведет ссылку с запросом - http://site.com/page_name.html?name=page_name. Это не странно, потому как задан параметр - $wp->query_string. Его конечно же можно удалить, но тогда отпадает смысл в использовании add_query_arg(). Это меня и привело к тому, чтобы переделать данный метод и получить 4 способ.

Способ №4 home_url

Данный способ вытекает из предыдущего, будет он использовать функцию home_url() с указанием параметра. По умолчанию данная функция выводит ссылку на главную страницу. С доработками она выглядит так:

<?php			
global $wp;
$current_url = home_url( $wp->request );
echo $current_url;
?>	

Данная функция выведет ссылку на любую текущую страницу сайта на WordPress. Данную функцию часто использую и я. Проблем с ней не возникало ни разу, поэтому могу рекомендовать к использованию и ее.

Вот такими получились мои поиски ответа на важный вопрос. Надеюсь в будущем появится какой-то один способ, а вернее одна функция, которая одним вызовом будет выводить текущую ссылку и не заставлять вебмастеров танцевать с бубном.

На этом все, спасибо за внимание. 🙂

Якщо Вам була корисна моя праця, можете фінансово підтримати сайт або відключити блокувальник реклами, що займе 2 хвилини :)

Хочу підтримати фінансово Хочу відключити блокувальник

Оцініть статтю
  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
Проголосовало: 6, в среднем: 5 из 5
Читайте також

Deprecated: Функція WP_Query викликана з аргументом, який вважається застарілим з версії 3.1.0! Вираз caller_get_posts застарілий. Використовуйте ignore_sticky_posts. in /var/www/vhosts/gnatkovsky.com.ua/gnatkovsky.com.ua/public/wp-includes/functions.php on line 6078