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


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

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

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

Но все, что я хочу вернуть, это imapage/subpage/subsubpage

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

 10
Author: Scott, 2011-11-02

4 answers

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

function get_relative_permalink( $url ) {
    return str_replace( home_url(), "", $url );
}
 10
Author: sanchothefat, 2011-11-02 17:02:05

На самом деле сейчас для этого есть основная функция. wp_make_link_relative($url)

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

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

Пример

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

Это выведет /wp_test/sample-page/

Пример с идентификатором записи <?php echo wp_make_link_relative(get_permalink( $post->ID )); ?>

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

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

 20
Author: Levi Cole, 2020-06-15 08:21:38

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

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

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

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

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

 4
Author: EAMann, 2011-11-02 17:04:24

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

 3
Author: EarnestoDev, 2011-11-02 17:31:20