Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP和Wordpress实现语言重定向_Php_Wordpress_Redirect_Browser - Fatal编程技术网

用PHP和Wordpress实现语言重定向

用PHP和Wordpress实现语言重定向,php,wordpress,redirect,browser,Php,Wordpress,Redirect,Browser,我需要为我正在处理的WordPress多站点创建一个语言重定向函数。此重定向将取决于用户的浏览器设置。我想我可以在头文件中创建一个会话,以便在访问站点时,站点检查会话是否已设置,然后相应地重定向。放在header.php顶部的代码- $url = $_SERVER['REQUEST_URI']; function redirect() { $language = explode( ',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] ); switch( $lang

我需要为我正在处理的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();
  }
}
$url=$\u服务器['REQUEST\u URI'];
函数重定向(){
$language=explode(“,”,$”服务器['HTTP\u ACCEPT\u language']);
开关($language[0]){
案例“sv”:
标题('Location:/sv/');
打破
案件‘否’:
标题('位置:/no/');
打破
案例“da”:
标题('位置:/da/');
打破
}
}
if(strlen($url)<4){
会话_start();
if(!isset($_会话['language'])和空($_会话['language'])){
$\u会话['language']=true;
重定向();
}
}

如果我跳过标题位置,只输出开关大小写,我可以看到浏览器语言被提取,但没有重定向。我在这方面做得对吗?还是应该采取完全不同的方法?

试试代码。请使用域名而不是“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();
  }
}
$url=$\u服务器['REQUEST\u URI'];
函数重定向(){
$language=explode(“,”,$”服务器['HTTP\u ACCEPT\u language']);
开关($language[0]){
案例“sv”:
wp_重定向('example.com/sv/');
退出();
打破
案件‘否’:
wp_重定向('example.com/no/');
退出();
打破
案例“da”:
wp_重定向('example.com/da/');
退出();
打破
}
}
if(strlen($url)<4){
会话_start();
if(!isset($_会话['language'])和空($_会话['language'])){
$\u会话['language']=true;
重定向();
}
}

尝试设置标题的绝对路径,例如。而且,不需要
!isset
因为您使用的是空的。谢谢。我试着设置一个绝对路径(也包括www),它在Chrome中工作,但Firefox和Safari都没有。。。我知道浏览器语言输出是不同的,我已经在我的代码中纠正了这一点。谢谢,但这根本不起作用。wp_-safe_重定向刚刚将我发送到网站上的随机页面(!)。我很好奇,使用wp_safe_重定向或头位置会有什么不同吗?是不是WP自己的路由系统导致了这种情况?随机页面意味着什么?是否不重定向到指定页面?