获取地址栏中显示的URL

除了Wordpress本机执行的URL重写之外, 我还在使用一些URL重写。
基本思想是, 我使用一个类别页面, 该页面的地址看起来好像它属于其他位置, 因此/ blog / type / kids是WP中的真正类别。我使用/ kids /中的.htaccess文件重写了此文件, 以使该类别看起来像实际上是一个名为/ kids / programs的页面, 并在kids文件夹中包含以下代码:

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

这发生在站点中的两个不同位置, 但是都在后台加载了相同的WP页面。这一切都很好。
我现在需要做的是根据要加载的位置设置一个变量, 以确保导航突出显示该站点的正确部分并显示正确的子导航。问题是我无法访问用户看到的新的重写URL。
【获取地址栏中显示的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为此具有内置标签?
干杯!
#1我也在使用重写, 这对我来说就像一个魅力:
$ _SERVER [‘ REDIRECT_SCRIPT_URL’ ]
你也可以使用
$ _SERVER [‘ REDIRECT_SCRIPT_URI’ ]
#2WordPress的get_permalink()函数在http://codex.wordpress.org/Function_Reference/get_permalink中有完整描述。这是用法:
< ?php echo get_permalink( $id ); ?>

如前所述, 由于你是在循环外进行操作, 因此不能只调用get_permalink(), 而必须将$ id传递给函数。你可以从循环内部设置$ id的值, 然后在调用get_permalink($ id)之前使用ISSET($ id)(为了安全)。
如果尝试使用get_permalink进行操作后有任何问题(我可以在循环外对其进行测试, 但是我没有使用mod_rewrite规则进行设置), 则可以从循环内使用仍然设置$ id, 然后手动构建使用类似这样的类别的URL, 并在’ http:// yourservername /’ 之后连接:
< ?php if(ISSET($specpostid)) { $catarray = get_the_category($id); echo $catarray[0]-> cat_name; } ?>

#3尝试这个
$ protocol = $ _SERVER [‘ HTTPS’ ] ==’ on’ 吗? ‘ https’ :’ http’ ; $ url = $ protocol。’ ://’ .$_SERVER [‘ HTTP_HOST’ ]。$ _ SERVER [‘ REQUEST_URI’ ];
网址变量$ url将为你提供网址, 如浏览器的地址栏中所示。
#4返回当前网址:
< ?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; } ?>

    推荐阅读