【问题标题】:Get URL As Shown In Address Bar获取地址栏中显示的 URL
【发布时间】:2019-03-01 18:18:14
【问题描述】:

在 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 有一个内置标签?

干杯!

【问题讨论】:

    标签: php wordpress url-rewriting wordpress-theming


    【解决方案1】:

    我也在使用 Rewrite,这对我很有帮助:

    $_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; } ?>
      

      【讨论】:

      • 我读过这个,但这部分让我第二次猜测:“请注意,当在没有 ID 参数的帖子页面(索引、存档等)的循环之外使用时,它将返回The Loop 中最后一篇文章的 URL,而不是当前页面的永久链接。”这绝对是在循环之外。
      • 我编辑了答案以回应您的评论。让我知道这是否有帮助。
      【解决方案3】:

      试试这个

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

      url 变量$url 将为您提供浏览器地址栏中显示的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;
            }
        ?>
        

        【讨论】:

        • 请重新阅读问题的最后一部分。 REQUEST_URI 未解析为正确的 URL。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-28
        • 1970-01-01
        • 2018-06-01
        • 2020-09-18
        • 2014-04-04
        • 2013-01-12
        • 2015-04-23
        相关资源
        最近更新 更多