2010-12-14 2 views
0

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

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

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 показывает/блог/тип/детей. Таким образом, ни один из них не показывает мне местоположение/kids/programs, которое действительно отображается.

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

Cheers!

ответ

-1

Возвращает текущий 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; 
    } 
?> 
+1

Пожалуйста, перечитайте последнюю часть вопроса. REQUEST_URI не разрешает правильный URL. –

0

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

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

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

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

<?php if(ISSET($specpostid)) { 
    $catarray = get_the_category($id); 
    echo $catarray[0]->cat_name; } ?> 
+0

Я прочитал это, но эта часть сделала мне второе предположение: «Обратите внимание, что при использовании вне цикла Loop на странице сообщений (индекс, архив и т. Д.) Без параметра ID он вернет URL-адрес последнего сообщения в The Loop, а не постоянная ссылка для текущей страницы. " И это определенно вне цикла. –

+0

Я отредактировал ответ в ответ на ваш комментарий. Сообщите мне, помогает ли это. – schellack

1

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

$ _SERVER ['REDIRECT_SCRIPT_URL']

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

$ _SERVER [ «REDIRECT_SCRIPT_URI»]

+0

Это работает в Joomla, когда JUri :: current() этого не делает. –

Смежные вопросы