Получить URL-адрес, как показано в адресной строке

Я использую некоторую переписывание URL-адресов поверх перезаписи URL-адресов, которую Wordpress делает изначально.

Основная идея заключается в том, что я использую страницу категории с адресом, который выглядит так, как будто он принадлежит чему-то другому, поэтому /blog/type/kids является истинной категорией в WP. Я переписываю это с файлом .htaccess в /kids/, чтобы категория выглядела так, как будто это на самом деле страница с именем /kids/programs с этим кодом в папке kids:

RewriteEngine on
RewriteRule ^programs$ /blog/type/kids/ [P]

Это происходит в двух разных местах на сайте, но оба загружают одну и ту же страницу WP за кулисами. Это все работает нормально.

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

В идеале я ищу что-то вроде этого:

if(strpos($_SERVER['PHP_SELF'],'kids//programs')) {
    $top_nav_item_id = 'kids';
} else {
    $top_nav_item_id = 'programs';
    $subnav_item_id = 'kids';
}

PHP_SELF разрешается в /blog/index.php, а REQUEST_URI показывает /blog/type/kids. Так что ни один из них не показывает мне местоположение /kids/programs, которое действительно отображается.

Любые идеи, как это получить? Может быть, у WP есть встроенный тег для этого?

Ваше здоровье!


person Cory Dee    schedule 14.12.2010    source источник


Ответы (4)


Я также использую Rewrite, и это работает для меня как шарм:

$_SERVER['REDIRECT_SCRIPT_URL']

вы также можете использовать

$_SERVER['REDIRECT_SCRIPT_URI']

person Roy Toledo    schedule 19.06.2011

Функция WordPress get_permalink() полностью описана на странице http://codex.wordpress.org/Function_Reference/get_permalink. . Вот использование:

<?php echo get_permalink( $id ); ?>

Поскольку вы работаете вне цикла, как вы упомянули, вы не можете просто вызвать get_permalink(), вы должны передать $id функции. Вы можете установить значение $id внутри цикла, а затем использовать ISSET($id) для безопасности перед вызовом get_permalink($id).

Если после попытки использовать get_permalink возникнут какие-либо проблемы (я смог проверить это вне цикла, но у меня нет настройки с вашими правилами mod_rewrite), вы можете использовать все еще set $id внутри цикла, а затем вручную создать URL-адрес с категорией, использующий что-то вроде этого, объединенный после «http://yourservername/»:

<?php if(ISSET($specpostid)) {
  $catarray = get_the_category($id);
  echo $catarray[0]->cat_name; } ?>
person schellack    schedule 14.12.2010
comment
Я читал это, но эта часть заставила меня задуматься: обратите внимание, что при использовании вне цикла на странице сообщений (индекс, архив и т. д.) без параметра ID он вернет URL-адрес последнего сообщения в цикле, не постоянная ссылка для текущей страницы. И это определенно вне цикла. - person Cory Dee; 14.12.2010
comment
Я отредактировал ответ в ответ на ваш комментарий. Дайте мне знать, поможет ли это. - person schellack; 27.12.2010

Попробуй это

$protocol = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http'; $url = $protocol.'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

Переменная URL-адреса $url даст вам URL-адрес, показанный в адресной строке браузера.

person Ibrahim Isa    schedule 01.03.2019

Возвращает текущий URL:

<?php 
   function curPageURL() {
     $pageURL = 'http';
     if (@$_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
     $pageURL .= "://";
     if ($_SERVER["SERVER_PORT"] != "80") {
      $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
     } else {
      $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
     }
     return $pageURL;
    }
?>
person MDiaz    schedule 14.12.2010
comment
Пожалуйста, перечитайте последнюю часть вопроса. REQUEST_URI не разрешается в правильный URL. - person Cory Dee; 14.12.2010