Получить постоянную ссылку на страницу без wpurl
В настоящее время у меня есть идентификатор страницы, на которой я хочу использовать ее постоянную ссылку в качестве передней части постоянной структуры CPT, которую я настраиваю.
Теперь я могу использовать get_permalink(), но это возвращает полный URL-адрес:
http://www.example.com/imapage/subpage/subsubpage
Но все, что я хочу вернуть, это imapage/subpage/subsubpage
Есть ли функция, которая может это сделать, или мне нужно создать что-то, что может вычесть ненужную часть URL-адреса?
4 answers
Нет ничего встроенного, чтобы вернуть нужный бит, но это должно быть так же просто, как использовать функцию home_url() и удалить ее вывод из полного URL-адреса, например:
function get_relative_permalink( $url ) {
return str_replace( home_url(), "", $url );
}
На самом деле сейчас для этого есть основная функция. 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()); ?>
Вы не сможете использовать get_permalink()
для этого.
Если вы покопаетесь в коде этой функции в /wp-includes/link-template.php
, вы поймете, почему. После того, как структура постоянной ссылки проанализирована и подготовлена, код делает следующее:
$permalink = home_url( str_replace($rewritecode, $rewritereplace, $permalink) );
Это выполняется сразу после создания структуры ссылки и до того, как что-либо будет передано через полезный фильтр.
Поэтому, к сожалению, вам придется самостоятельно извлечь ненужную часть URL-адреса. Я бы рекомендовал использовать функцию str_replace()
, которая предложил @sanchothefat.
$path = parse_url(get_permalink(...), PHP_URL_PATH);
... указывает только URL-ПУТЬ . Это относится не к корню блога, а к домену. Это абсолютный URI.