Як отримати URL-адресу поточної сторінки?


55

Я хочу додати спеціальний PHP-код, щоб переконатися, що щоразу, коли сторінка на моєму веб-сайті завантажується у моєму браузері, URL-адреса цієї сторінки лунатиме на екран. Я можу використовувати echo get_permalink(), але це працює не на всіх сторінках. На деяких сторінках (наприклад, моя домашня сторінка ) відображається кілька публікацій, і якщо я використовую get_permalink()на цих сторінках, URL-адреса відображеної сторінки не повертається (я вважаю, що вона повертає URL останнього допису в циклі). Як я можу повернути URL-адресу на цих сторінках?

Чи можу я приєднатися get_permalink()до певного гачка, який спрацьовує перед виконанням циклу? Або я можу якось вирватися з циклу або скинути його, як тільки він завершиться?

Дякую.


Чи можете ви надати певний контекст щодо того, що ви хочете зробити з цією URL-адресою? Ви намагаєтесь створити спільні URL-адреси? Зберіть власні URL-адреси для посилань / дій?
Tom J Nowell

@TomJNowell Я хотів би застосувати певний сценарій JS, але лише на певних сторінках (у цьому випадку ці сторінки є домашньою сторінкою мого сайту на різних мовах: example.com , example.com/fr , example.com/es , тощо). Файл JS надасть сервер для додавання гіперпосилань до декількох назв, які відображаються лише на домашній сторінці.
cag8f

чому б не просто використовувати is_home()або is_page( 'fr' )т. д. і лише запускати сценарій, якщо це правда?
Том Дж. Ноуелл

@TomJNowell Ну тепер мій код такий: if ( home_url( $wp->request ) == home_url() ) { wp_enqueue_script();} Здається, він відкривається на кожній домашній сторінці, незалежно від мови. Це те, що ви запропонували?
cag8f

Чому б не користуватися $_SERVER['REQUEST_URI']і компанією? Дивіться це питання: stackoverflow.com/q/6768793/247696
Флімм

Відповіді:


86

get_permalink() корисний лише для окремих сторінок і публікацій і працює лише в циклі.

Найпростіший спосіб, який я бачив, це:

global $wp;
echo home_url( $wp->request )

$wp->requestвключає в себе частину шляху URL-адреси, наприклад. /path/to/pageі home_url()виводить URL у Налаштуваннях> Загальне, але ви можете додати шлях до нього, тому ми додаємо шлях запиту до домашньої URL-адреси в цьому коді.

Зауважте, що це, ймовірно, не буде працювати з Постійними посиланнями, встановленими на Звичайний, і залишать рядки запитів ( ?foo=barчастина URL-адреси).

Щоб отримати URL-адресу, коли постійні посилання встановлені як звичайні, ви можете скористатися ними $wp->query_vars, передавши її на add_query_arg():

global $wp;
echo add_query_arg( $wp->query_vars, home_url() );

І ви можете комбінувати ці два методи, щоб отримати поточну URL-адресу, включаючи рядок запиту, незалежно від налаштувань постійної посилання:

global $wp;
echo add_query_arg( $wp->query_vars, home_url( $wp->request ) );

7
Якщо Permalinks встановлений на рівнині: echo '//' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];.
Макс Юдін

1
@Jacob Я спробував це, але, схоже, повертає URL-адресу лише моєї домашньої сторінки. Як ви бачите у верхньому лівому куті цієї сторінки ( dev.horizonhomes-samui.com/properties/hs0540 ), куди я вставив код echo home_url( $wp->request ). Я також забезпечив включення global $wp. Постійні посилання не є "Звичайними", але встановлені на "Ім'я публікації". Я також не бачу відповідних помилок PHP у журналі. Ця конкретна сторінка є частиною мого розробника, який інакше блокується для відвідувачів. Я не впевнений, це має значення чи ні. edit: Насправді, дотримуйтесь такої думки - може статися помилка користувача.
Очікуйте

@Jacob edit 2: OK ваш код дійсно працює. Моя проблема полягала в тому, що я включав код у function.php "голий", тобто не в жодній функції, прикріпленій до гака. Отже ваш код повертав URL-адресу домашньої сторінки, незалежно від сторінки, яка відображалася в моєму браузері. Після того, як я перемістив код всередині функції - функції, прикріпленої до гака WP (wp_enqueue_scripts), він дійсно повернув URL-адресу відображеної сторінки. Чи знаєте ви причину такої поведінки? Можливо, для цього мені потрібно створити нове запитання.
cag8f

3
@ cag8f Якщо код сидить "голий" у function.php, тоді ви запускаєте його до того, як будуть встановлені всі властивості $ wp-об'єкта. Коли ви загортаєте його у функцію, прикріплену до відповідного гака, то ви затримуєте його виконання, поки не запуститься відповідна точка в коді Wordpress.
Енді Маколей-Брук

Ці методи - приголомшливі та чудові ідеї для роботи з WordPress. Ви можете додати trailingslashit()до них, хоча, залежно від ваших потреб.
Джейк

8

Ви можете використовувати наведений нижче код, щоб отримати всю поточну URL-адресу в WordPress:

global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));

Це покаже повний шлях, включаючи параметри запиту.


Привіт - якщо ви подивитесь на developer.wordpress.org/reference/functions/add_query_arg, ви побачите, що ваш код насправді не зберігає існуючі параметри запиту.
Енді Маколей-Брук

2
Щоб зберегти параметри запиту, вам потрібно буде замінити порожній array()на $_GET. тобто:home_url(add_query_arg($_GET,$wp->request));
Бред Адамс

Він не працюватиме, якщо WordPress буде встановлений у підкаталозі
ManzoorWani

1
function current_location()
{
    if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
        $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
        $protocol = 'https://';
    } else {
        $protocol = 'http://';
    }
    return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}

echo current_location();

Чи можете ви пояснити, як і чому цей код вирішує питання?
керо

На мій погляд, найбільш гнучке рішення. Він працює на будь-якій сторінці WP (навіть на wp-admin, wp-login.php, архівних сторінках тощо). Зауважте лише, що він не включає параметри URL-адрес
Філіп

1

Наступний код надасть поточну URL-адресу:

global $wp;
echo home_url($wp->request)

Ви можете використовувати код нижче, щоб отримати повну URL-адресу разом з параметрами запиту.

global $wp;  
$current_url = home_url(add_query_arg(array($_GET), $wp->request));

Це покаже повний шлях, включаючи параметри запиту. Це збереже параметри запиту, якщо вони вже є в URL-адресі.


Цей фрагмент пропускає wp-admin/plugins.phpмою поточну URL-адресу, це лише кореневий шлях та рядки запиту.
Рішард Єдрашик

0

Це вдосконалений спосіб прикладу, який згадувався раніше. Він працює, коли ввімкнуто гарні URL-адреси, проте він відкидає, якщо є якийсь параметр запиту, наприклад / page-slug /? Param = 1 або URL-адреса взагалі некрасива.

Наступний приклад буде працювати в обох випадках.

    $query_args = array();

    $query = wp_parse_url( $YOUR_URL );

    $permalink = get_option( 'permalink_structure' );

    if ( empty( $permalink ) ) {

        $query_args = $query['query'];

    }

    echo home_url( add_query_arg( $query_args , $wp->request ) )

0

Можливо, wp_guess_url()це те, що вам потрібно. Доступний з версії 2.6.0.


Це просто здогадується про базову URL-адресу. На фронті ви закінчуєте подібний ефект home_url().
Джейк

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.