【问题标题】:Language redirect with PHP and Wordpress使用 PHP 和 Wordpress 进行语言重定向
【发布时间】:2015-09-03 15:23:51
【问题描述】:

我需要为我正在处理的 WordPress 多站点创建语言重定向功能。此重定向将取决于用户的浏览器设置。我想我可以在头文件中创建一个会话,以便在访问该站点时,该站点检查是否已经设置了会话,然后进行相应的重定向。放在 header.php 顶部的代码 -

$url = $_SERVER['REQUEST_URI'];
function redirect() {
  $language = explode( ',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
  switch( $language[0] ) {
    case 'sv':
      header( 'Location: /sv/' );
      break;
    case 'no':
      header( 'Location: /no/' );
      break;
    case 'da':
      header( 'Location: /da/' );
      break;
  }
}
if ( strlen($url) < 4 ) {
  session_start();
  if ( !isset($_SESSION[ 'language' ]) && empty($_SESSION[ 'language' ]) ) {
    $_SESSION[ 'language' ] = true;
    redirect();
  }
}

如果我跳过标题位置并仅输出 switch case,我可以看到浏览器语言已获取,但没有重定向。我是在正确的轨道上还是应该采取完全不同的方法?

【问题讨论】:

  • 尝试设置标题的绝对路径,例如。 example.com/sv。此外,不需要!isset,因为您使用的是empty
  • 谢谢。我尝试设置一个绝对路径(也包括 www),它可以在 Chrome 中运行,但 Firefox 或 Safari 都不能...我知道浏览器语言输出不同,我已经在我的代码中更正了。

标签: php wordpress redirect browser


【解决方案1】:

试试代码。使用您的域名而不是“example.com”。

 $url = $_SERVER['REQUEST_URI'];
    function redirect() {
      $language = explode( ',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
      switch( $language[0] ) {
        case 'sv':


         wp_redirect('example.com/sv/');
          exit();
          break;
        case 'no':

         wp_redirect('example.com/no/');
          exit();
          break;
        case 'da':
         wp_redirect('example.com/da/');
             exit();
          break;
      }
    }

if ( strlen($url) < 4 ) {
  session_start();
  if ( !isset($_SESSION[ 'language' ]) && empty($_SESSION[ 'language' ]) ) {
    $_SESSION[ 'language' ] = true;
    redirect();
  }
}

【讨论】:

  • 谢谢,但这根本不起作用。 wp_safe_redirect 刚刚将我发送到网站上的随机页面(!)。我很好奇,使用 wp_safe_redirect 或 Header 位置会有什么不同吗?是不是 WP 自己的路由系统导致了这种情况?
  • 随机页面是什么意思?没有重定向到指定页面?
猜你喜欢
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多