Получить URL текущей страницы (включая нумерацию страниц)

13

Есть ли функция WP для автоматического получения правильного URL текущей страницы? Это означает, что если я только что открыл одно сообщение, функция возвращает то же, что и get_permalink(), но если я нахожусь на разбитом на страницы экземпляре страницы (при разбивке на страницы в комментариях), функция возвращает то же самое, get_pagenum_link(get_query_var('paged'))что и делает.

Я искал кодекс, но не нашел то, что искал. (Но даже get_pagenum_link()не зарегистрировано там.)

Я уже знаю об этой функции , но я был бы рад, если бы была «родная» функция WP, которая делает эту работу.

Заранее спасибо! С уважением, Рене

Рене Шуберт
источник

Ответы:

27

В дополнение к ответу Раджива Вьяса, вам не нужно передавать непустые параметры add_query_arg(). Следующее всегда работало хорошо для меня:

// relative current URI:
$current_rel_uri = add_query_arg( NULL, NULL );

// absolute current URI (on single site):
$current_uri = home_url( add_query_arg( NULL, NULL ) );

Функция возвращается к ней $_SERVER[ 'REQUEST_URI' ]и применяется urlencode_deep()к ней. См. Https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673.

Редактировать: поскольку $_SERVER[ 'REQUEST_URI' ]представляет нефильтрованный пользовательский ввод, всегда следует избегать возвращаемого значения add_query_arg()при изменении контекста. Например, используйте esc_url_raw()для использования БД или esc_attr()или esc_url()для HTML.

Обновить

Показанный пример, который должен создать абсолютный URI (содержащий схему и хост), не работает на мультисайтах с подкаталогами, так как home_url()будет возвращать полный URI, включая сегмент пути. Лучшее решение для многосайтового кода:

// absolute URI in multisite aware environment
$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL );

Ядро WordPress не поддерживает порт, пользователя или пароль в URL-адресе многосайтового сайта, поэтому этого должно быть достаточно.

Дэвид
источник
Разочарование, что OP не выбрал этот ответ в качестве решения, которое оно есть. Спасибо.
cfx
3
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

Не функция, но определенно использует код WordPress ..

http://kovshenin.com/2012/current-url-in-wordpress/

Раджив Вьяс
источник
2
Это работает частично, но некоторые вещи работают не так, как я хочу: параметры вроде yearдобавляются в строку запроса, даже если их раньше не было, а другие параметры, например replytocomпараметр, теряются. Вы знаете решение для этого?
Рене Шуберт
0

1) $_SERVER['REQUEST_URI']- Возвращает URL-адрес для доступа к странице, на которой выполняется скрипт. Если вам нужно набрать http://www.example.com/product.php?id=5для доступа к странице, то $_SERVER['REQUEST_URI']возвращает /product.php?id=5.

2) $_SERVER['DOCUMENT_ROOT']- Возвращает корневой каталог сервера, который указан в файле конфигурации сервера. Эта переменная обычно возвращает путь, как /usr/yoursite/wwwв Linux и D:/xamps/xampp/htdocsв Windows.

3) $_SERVER['HTTP_HOST']- возвращает имя хоста, указанное в заголовке http. Эта переменная обычно возвращает путь, например, example.comкогда вы находите http://example.comв адресной строке браузера, и возвращает, www.example.comкогда вы видите http://www.example.comв адресной строке. Это очень полезно , когда вы , чтобы сохранить сеанс, делая онлайн - платежей с помощью PHP , так как сессия сохраняется для http://example.comне такой же , как для http://www.example.com.

4) $_SERVER['HTTP_USER_AGENT']- Возвращает детали пользовательского агента (браузера), обращающиеся к веб-странице. Мы можем использовать strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”)для обнаружения Microsoft Internet Explorer или вы можете использовать strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”)для обнаружения браузера Firefox в PHP.

5) $_SERVER['PHP_SELF']- Возвращает имя файла исполняемого в данный момент скрипта. Предположим, что вы получаете доступ к URL, а http://www.example.com/product.php?id=5затем $_SERVER['PHP_SELF']возвращаетесь /product.phpв свой скрипт.

6) $_SERVER['QUERY_STRING']- возвращает строку запроса, если строка запроса используется для доступа к выполняемому в данный момент сценарию. Строки запроса - это те строки, которые доступны после «?» sign.if вы используете $_SERVER['QUERY_STRING']в скрипте, выполняя следующий URL, http://www.example.com/index.php?id=5&page=productзатем он возвращается id=5&page=productв вашем скрипте.

7) $_SERVER['REMOTE_ADDR']- Возвращает IP-адрес удаленного компьютера, обращающегося к текущей странице. Но вы не можете рассчитывать на $_SERVER['REMOTE_ADDR']получение реального IP-адреса компьютера клиента. Смотрите эту статью, чтобы узнать, как получить настоящие IP-адреса в PHP.

8) $_SERVER['SCRIPT_FILENAME']- возвращает абсолютный путь к файлу, который в данный момент выполняется. Он возвращает путь как var/example.com/www/product.phpв Linux и путь как D:/xampp/xampp/htdocs/test/example.phpв Windows.

Foxsk8
источник
1
Имейте в виду, что ни один из них не доступен в вашем CLI и поэтому бесполезен для заданий cron.
Кайзер
0

wp_guess_url - это то, что вы ищете.

Угадай URL для сайта.

Удалит ссылки wp-admin для получения только обратных URL-адресов, не входящих в каталог wp-admin.

Джесси
источник
Это возвращает совершенно другой URL, отличный от текущей страницы, когда я пытался его использовать.
Кирби
0

add_query_args( null, null ) создаст элемент массива с пустым ключом ( $qs[""] = null), хотя это не повлияет на результат.


Согласно add_query_arg () | Функция | Ресурсы WordPress для разработчиков , 2-й, 3-й параметры являются необязательными и могут быть опущены.

add_query_args( null, null )может быть короче .

$current_url = add_query_args( [] );

Существует также самая короткая версия, хотя она не рекомендуется, поскольку 1-й параметр является обязательным параметром.

$current_url = add_query_args();

Кроме того, обратите внимание, что оба home_url( add_query_vars( [] ) )и home_url( add_query_arg( null, null ) ) могут не возвращать фактический URL, когда WordPress установлен в подкаталог.

Например, https://example.com/wp/wp/fooможет быть возвращен, когда WordPress установлен в https://example.com/wp/.


Обновление: 2017/01/23

Моя версия основана на решении Дэвида, чтобы получить абсолютный URL.

$parts = parse_url(home_url());
$uri   = $parts['scheme'] . '://' . $parts['host'];

if (array_key_exists('port', $parts)) {
    $uri .= ':' . $parts['port'];
}

$uri .= add_query_arg([]);
Whizark
источник
0

У меня <?php esc_url(the_permalink()); ?>работает (на странице архива с нумерацией страниц).

Хеннинг Фишер
источник
Невозможно. the_permalink()повторяет сбежавшую постоянную ссылку, она ничего не возвращает. The esc_url()ничего не получает, и если бы это было, это был бы экранированный URL.
Fuxia
Вы правы, это сработало только из-за кеширования постоянных ссылок, я думаю.
Хеннинг Фишер
-1

Я не делаю пагинацию, но вы можете использовать эту функцию, чтобы получить URL в цикле

<?php $ID = get_the_ID(); 
echo get_permalink( $ID ); ?>

Или же, если вы не предпочитаете использовать php, вы также можете выбрать здесь метод jquery (это поможет вам заставить его работать вне цикла)

$(document).ready(function () {
var vhref = $(location).attr('href');
var vTitle = $(this).attr('title');
$('#spnTitle').html('' + vTitle + '');
$('#spnURL').html('' + vhref + '');
});​

или если вы предпочитаете использовать функцию php, вам нужно получить идентификатор вне цикла

Vaibhav
источник
1
Извините, но это не то, о чем я просил ... + the_permalink()идентификатор не нужен, когда он вызывается внутри цикла.
Рене Шуберт
2
Этот ответ имел очень мало общего с первоначальным вопросом. Он не ответил правильно и не дал никакой ценной информации по теме.
Юрист
-2

Вы можете использовать функцию WordPress, чтобы получить URL текущей страницы

the_permalink()

Это вернет вам ссылку на URL страницы.

Вивек Пандей
источник
4
Почти; the_permalink()будет печатать на URL текущего сообщения. Но он не будет работать для других запросов и не будет включать такие переменные, как разбиение на страницы. Так что не совсем ответ @ Рене Шуберт ищет.
TheDeadMedic