Получить постоянную ссылку страницы без домена WordPress

2 нояб. 2011 г., 18:40:18
Просмотры: 13.9K
Голосов: 10

У меня есть ID страницы, постоянную ссылку которой я хочу использовать как основу для структуры постоянных ссылок настраиваемого типа записи.

Я могу использовать get_permalink(), но он возвращает полный URL:

http://www.example.com/imapage/subpage/subsubpage

но мне нужно получить только imapage/subpage/subsubpage

Существует ли функция для этого или мне нужно самостоятельно вырезать ненужную часть URL?

1
Все ответы на вопрос 5
2
25

Теперь для этого существует встроенная функция. wp_make_link_relative($url)

Преобразует полные URL-адреса в относительные пути.

Удаляет протоколы http или https и домен. Сохраняет начальный слеш '/' в пути, поэтому это не совсем относительная ссылка, а путь относительно корня веб-сайта.

Пример

<?php echo wp_make_link_relative('http://localhost/wp_test/sample-page/'); ?>

Результат будет: /wp_test/sample-page/

Пример с ID записи <?php echo wp_make_link_relative(get_permalink( $post->ID )); ?>

Пример для текущей записи <?php echo wp_make_link_relative(get_permalink()); ?>

Подробнее об этом можно узнать в документации.

1 сент. 2016 г. 15:56:49
Комментарии

Этот ответ следует отметить как правильный, потому что он использует встроенную вспомогательную функцию WordPress Core: https://developer.wordpress.org/reference/functions/wp_make_link_relative/

sun sun
22 янв. 2018 г. 20:06:14

не самое лучшее решение, потому что если вы запускаете WordPress на localhost через MAMP и у вас несколько проектов на localhost/*, ответ от wp_make_link_relative(get_permalink()) будет /wp_dir/category_slug

Gediminas Gediminas
16 июн. 2019 г. 13:32:18
2
11

В WordPress нет встроенной функции для возврата нужной вам части URL, но это легко сделать, используя функцию home_url() и удалив её вывод из полного URL, например:

function get_relative_permalink( $url ) {
    return str_replace( home_url(), "", $url );
}
2 нояб. 2011 г. 19:02:05
Комментарии

Я пришел к тому же фрагменту кода, но надеялся, что в ядре уже есть функция, которая возвращает его в нужном мне виде.

Scott Scott
2 нояб. 2011 г. 19:29:41

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

David David
1 сент. 2016 г. 17:50:41
0

Вы не сможете использовать get_permalink() для этой задачи.

Если изучить код этой функции в файле /wp-includes/link-template.php, станет понятно почему. После того как структура постоянной ссылки разобрана и подготовлена, код выполняет следующее:

$permalink = home_url( str_replace($rewritecode, $rewritereplace, $permalink) );

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

К сожалению, вам придётся самостоятельно извлекать ненужную часть URL. Я бы рекомендовал использовать функцию str_replace(), которую предложил @sanchothefat.

2 нояб. 2011 г. 19:04:24
0

$path = parse_url(get_permalink(...), PHP_URL_PATH); ... возвращает только ПУТЬ URL. Он не является относительным к корню блога, а относится к домену. Это абсолютный URI.

2 нояб. 2011 г. 19:31:20
0
$relative_permalink = wp_make_link_relative(get_permalink($post->ID));

wp_make_link_relative( string $link )

Удаляет протоколы http или https и домен. Сохраняет слеш '/' в начале пути, поэтому это не абсолютно относительная ссылка, а относительная от корня веб-сайта.

5 сент. 2021 г. 13:08:51