Отримати 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-адресі багатосайтового сайту, тому цього повинно бути достатньо.


Розчаровує те, що ОП не обрала цю відповідь як рішення, яке воно є. Дякую.
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/htdocsWindows.

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”)для виявлення Internet Explorer Microsoft або ви можете 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.якщо ви використовуєте $_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.


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([]);

0

Для мене <?php esc_url(the_permalink()); ?>працює (на сторінці архіву з вкладкою).


Неможливо. the_permalink()перегукується з втеченою постійною посиланням, вона нічого не повертає. 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, вам потрібно отримати ідентифікатор поза циклом


1
Вибачте, але я просто не те, про що я просив ... + the_permalink()не потрібен ідентифікатор, коли він викликається всередині циклу.
Рене Шуберт

2
Ця відповідь мала дуже мало спільного з початковим запитанням. Він не відповів на це правильно, а також не дав жодної цінної інформації щодо цієї теми.
junileander

-2

Ви можете використовувати функцію wordpress, щоб отримати поточну URL-адресу сторінки

the_permalink()

Це поверне вам посилання на сторінку curremt.


4
Майже; the_permalink()буде друкувати на URL поточного повідомлення. Але він не працюватиме для інших запитів і не буде включати такі змінні, як пагинація. Тож не дуже потрібна відповідь @ Рене Шуберт.
TheDeadMedic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.