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

Вопрос или проблема

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

Могу ли я прикрепить get_permalink() к определенному хуку, который срабатывает перед выполнением цикла? Или могу ли я каким-то образом выйти из цикла или сбросить его, когда он закончится?

Спасибо.

get_permalink() действительно полезен только для одиночных страниц и постов и работает только внутри цикла.

Самый простой способ, который я видел, таков:

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

$wp->request включает путь URL, например, /path/to/page, и home_url() выводит URL в Настройки > Основные, но вы можете добавить к нему путь, так что в этом коде мы добавляем путь запроса к домашнему URL.

Обратите внимание, что это, вероятно, не сработает, если постоянные ссылки установлены в простой режим, и не будет учитывать строку запроса (часть URL ?foo=bar).

Чтобы получить 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 ) );

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

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

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

Почему бы просто не использовать?

get_permalink( get_the_ID() );

Это для одиночных страниц.

Для страниц категорий используйте это:

get_category_link( get_query_var( 'cat' ) );

Простой скрипт для получения текущего URL любой страницы:

// получить текущий URL 
$current_url = get_permalink( get_the_ID() );
if( is_category() ) $current_url = get_category_link( get_query_var( 'cat' ) );
echo $current_url;
      

В моем случае этот код работал отлично:

$current_url = home_url($_SERVER['REQUEST_URI'])

Надеюсь, это поможет кому-то, я попробовал все ответы, но этот был полезным.

Следующий код даст текущий URL:

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

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

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

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

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

function getCurrentUrl() {
    $protocol = is_ssl() ? 'https://' : 'http://';
    return ($protocol) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
$currentUrl = getCurrentUrl();
echo $currentUrl;

Вывод будет включать параметры запроса URL и слуги.

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

global $wp;
$wp->parse_request();
$current_url = home_url($wp->request);

Это улучшенный способ примера, упомянутого ранее. Он работает, когда активированы красивые 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 ) )

Возможно, wp_guess_url() — это то, что вам нужно. Доступно с версии 2.6.0.

После стольких исследований простого задания, сочетание всех ответов выше сработало для нас:

function get_wp_current_url(){
    global $wp;
    if('' === get_option('permalink_structure')) return home_url(add_query_arg(array($_GET), $wp->request));
        else return home_url(trailingslashit(add_query_arg(array($_GET), $wp->request)));
}

Нет отсутствующей косой черты в конце и так далее. Так как вопрос касается вывода текущего URL, это не заботится о безопасности и подобном. Однако хеш, как #comment в конце, невозможно найти в PHP.

Это сработало для меня (короткое и чистое решение, которое также включает строки запроса в URL):

$current_url = add_query_arg( $_SERVER['QUERY_STRING'], '', home_url( $wp->request ) );

Выходной URL будет выглядеть следующим образом

http://sometesturl.test/slug1/slug2?queryParam1=testing&queryParam2=123

Решение было взято отсюда

Я понимаю, что это старый вопрос, однако одна вещь, которую я заметил, это то, что никто не упомянул о использовании get_queried_object().

Это глобальная функция wp, которая получает все, что связано с текущим URL, на котором вы находитесь. Например, если вы находитесь на странице или посте, она вернет объект поста. Если вы находитесь в архиве, она вернет объект типа поста.

WP также имеет множество вспомогательных функций, таких как get_post_type_archive_link, к которым вы можете передать поле типа поста объекта и получить его ссылку следующим образом:

get_post_type_archive_link(get_queried_object()->name);

Суть в том, что вам не нужно полагаться на некоторые из более хакерских ответов выше, и вместо этого использовать запрашиваемый объект, чтобы всегда получать правильный URL.

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

WP что-то обновили, и теперь свойство request глобального $wp по умолчанию пустое. Вы должны вызвать специальный метод parse_request перед тем, как получить данные этого свойства.

Так что это было так:

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

Теперь это должно быть следующим образом:

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

П.С. Я хотел бы оставить комментарий под самым популярным ответом, но у меня нет разрешения оставлять комментарии.

Может быть, уже поздно, но для кого это может помочь, get_page_link() должно решить проблему. Если вам нужен только uri страницы, get_page_uri() — идеальный помощник.

Ответ или решение

Чтобы получить URL текущей страницы в WordPress, необходимо учитывать несколько нюансов, связанных с различными типами страниц и структурой постоянных ссылок. Ниже приведены несколько подходов к решению этой задачи.

1. Использование глобальной переменной $wp

Когда страница загружена, вы можете использовать глобальную переменную $wp, чтобы получить текущий URL. Для этого выполните следующую команду:

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

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

2. Учет запросов и параметров

Для того чтобы получить полный URL вместе с параметрами запроса, можно воспользоваться следующей комбинацией:

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

Этот подход учитывает параметры URL. Он также работает вне зависимости от настроек постоянных ссылок.

3. Общая функция для получения текущего URL

Чтобы сделать код более чистым и многоразовым, можно написать вспомогательную функцию, которая будет возвращать текущий URL:

function getCurrentUrl() {
    $protocol = is_ssl() ? 'https://' : 'http://';
    return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}

$currentUrl = getCurrentUrl();
echo $currentUrl;

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

4. Использование add_query_arg

Для получения актуального URL с параметрами запроса можно легко использовать следующую конструкцию:

$current_url = add_query_arg($_SERVER['QUERY_STRING'], '', home_url($wp->request));
echo $current_url;

Этот метод обеспечит корректное получение полного URL со всеми параметрами.

5. Дополнительные методы в зависимости от типа страницы

Для различных типов страниц можно использовать подходящие функции:

  • Для индивидуальных записей (постов и страниц):
$current_url = get_permalink(get_the_ID());
  • Для категорий:
$current_url = get_category_link(get_query_var('cat'));

Заключение

Используйте приведенные выше методы для получения URL текущей страницы. Подход с использованием $wp и home_url() является наиболее универсальным и подойдет для большинства случаев. Вы также можете расширить свои функции, учитывая различные типы страниц и их особенности.

При внедрении кода убедитесь, что он соответствует стандартам безопасности и не нарушает функциональность сайта.

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

Капча загружается...