除了Wordpress本机执行的URL重写之外, 我还在使用一些URL重写。
基本思想是, 我使用一个类别页面, 该页面的地址看起来好像它属于其他位置, 因此/ blog / type / kids是WP中的真正类别。我使用/ kids /中的.htaccess文件重写了此文件, 以使该类别看起来像实际上是一个名为/ 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为此具有内置标签?
干杯!
#1
我也在使用重写, 这对我来说就像一个魅力:
$ _SERVER [‘REDIRECT_SCRIPT_URL’]
你也可以使用
$ _SERVER [‘REDIRECT_SCRIPT_URI’]
#2
WordPress的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;
}
?>
评论前必须登录!
注册