Я создал хлебное меню, которое получает URL страницы, explodes
текст после каждой косой черты (после домена) и выводит его на печать.
Это работает нормально, если строка запроса не добавленаоднако к URL-адресу после добавления запроса дублируется ссылка:
Рабочий пример:
<?php
$url = "/parent/child";
// 1. Get URL
$crumbs = explode("/", trim($url, '/'));
// 2. Strip extras
$build = '';
// 3. Define int so last item is not a link
$lastKey = count($crumbs) - 1;
// 4. Execute loop
foreach($crumbs as $key => $crumb){
$build .= '/'.$crumb;
// format text
$crumb = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
$crumb = preg_replace('/-/', ' ', $crumb); // remove dashes
$crumb = trim($crumb); // remove whitespace from before and after string
$pagename = "child";
echo $key < $lastKey
? "$crumb /" : $pagename;
}
?>
Приведенные выше выходные данные: Parent /child
Что нормально.
Однако, теперь второй тест со строкой запроса (обратите внимание на $url
):
<?php
$url = "/parent/child/?=query-string";
// 1. Get URL
$crumbs = explode("/", trim($url, '/'));
// 2. Strip extras
$build = '';
// 3. Define int so last item is not a link
$lastKey = count($crumbs) - 1;
// 4. Execute loop
foreach($crumbs as $key => $crumb){
$build .= '/'.$crumb;
// format text
$crumb = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
$crumb = preg_replace('/-/', ' ', $crumb); // remove dashes
$crumb = trim($crumb); // remove whitespace from before and after string
$pagename = "parent";
echo $key < $lastKey
? "$crumb /" : $pagename;
}
?>
Это выводит: Parent / Child / parent Ожидаемый результат: ** Parent / Child **
Я понимаю, что установил $pagename = "parent"
, но хочу, чтобы он игнорировал строки запроса.
Я пробовал следующее:
$crumbs = explode("/", trim($_SERVER["REQUEST_URI"], '/'));
$crumbs = preg_replace('/\?.*/', '', $crumbs);
Все те же результаты.
Последний код:
<?php
// 1. Get current URL
$crumbs = trim($_SERVER["REQUEST_URI"]);
$crumbs = preg_replace('/\?.*/', '', $crumbs);
$crumbs = explode("/", $crumbs);
array_filter($crumbs);
$count = count($crumbs);
$build = '';
// 3. Define int so last item is not a link
$lastKey = count($crumbs) - 1;
// 4. Execute loop
foreach($crumbs as $key => $crumb){
$build .= $crumb;
// format text
$crumb = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
$crumb = preg_replace('/-/', ' ', $crumb); // remove dashes
$crumb = trim($crumb); // remove whitespace from before and after string
$pagename = get_query_var('pagename');
$pagename = the_title('', '', false); // print page name as is in WP
$pagename = preg_replace('/-/', ' ', $pagename); // remove dashes
$pagename = trim($pagename);
echo $key < $lastKey
? "<a class='crumbLink' href=".$build.">".$crumb."</a>
<span class='slash'>/</span>"
: $pagename;
}
?>