Получить URL как показано в адресной строке - PullRequest
1 голос
/ 14 декабря 2010

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

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

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

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

Что мне нужно сделать сейчас, это установить переменную, основанную на том, из какого места он загружается, чтобы гарантировать, что навигация подсвечивает соответствующий раздел сайта и показывает надлежащий subnav. Проблема в том, что я не могу получить доступ к новому, переписанному 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 имеет встроенный тег для этого?

Ура!

Ответы [ 4 ]

1 голос
/ 19 июня 2011

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

$ _ SERVER ['REDIRECT_SCRIPT_URL']

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

$ _ SERVER[ 'REDIRECT_SCRIPT_URI']

0 голосов
/ 01 марта 2019

Попробуйте это

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

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

0 голосов
/ 14 декабря 2010

Функция 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), вы можете по-прежнему использовать $ id из цикла, а затем вручную создать URL с категорией, используя что-то вроде этого, объединенное после 'http://yourservername/':

<?php if(ISSET($specpostid)) {
  $catarray = get_the_category($id);
  echo $catarray[0]->cat_name; } ?>
0 голосов
/ 14 декабря 2010

Возвращает текущий 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;
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...