Forfly 翔!
Mr. Le's personal blog, life, love and others. 人生就像是旅行,不必在乎目的地,只在乎沿途的风景!
All Rights reserved by Mr. Le

wordpress根据浏览器语言访问不同网页

wordpress 做CMS,有时候需要根据不同语言让访客只能访问特定的网页,

主要是判断浏览器的值:HTTP_ACCEPT_LANGUAGE

网上有很多这样的判断,但是如果定义“else”访问网站本身,就会陷入死循环,打开根目录下的index.php (不是修改模板目录下的Index.php), 修改如下:

<?php
$lang = substr($_SERVER[‘HTTP_ACCEPT_LANGUAGE’], 0, 2);
if($lang==”zh”) header(“location: http://forfly.net/cn-index.htm”);//此大写代码为添加。
/**
 * Front to the WordPress application. This file doesn’t do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define(‘WP_USE_THEMES’, true);/** Loads the WordPress Environment and Template */
require(‘./wp-blog-header.php’);
?>

其中解释如下:

1. 取SERVER[‘HTTP_ACCEPT_LANGUAGE’的前两位,判断如果是ZH,则是中文简体或者繁体,全部跳转到CN-INDEX.htm。

2. 注意 hearder函数的用法,次函数只能放在最上方,在运行该函数之前不能运行去他任何语言。location和冒号(:)之间不能有空格,特别注意。

在修改此问题的时候,会容易发现本来的网站错位,请查看我的另外一个帖子。

另外的一个问题是浏览器类型,一般用$_SERVER[“HTTP_USER_AGENT值判断,上边的代码在IE6和IE8测试过,不知道其他浏览器是否会有用,若哪位测试过请告诉我一下[email protected], 非常感谢。如果在其他浏览器不能使用,则需要加上$_SERVER[“HTTP_USER_AGENT判断。

备注一下其他从网上搜到的代码,我做了测试,不能用,但是可以参考:

<?php error_reporting(E_ALL ^ E_NOTICE); // 分析 HTTP_ACCEPT_LANGUAGE 的属性
// 这里只取第一语言设置 (其他可根据需要增强功能,这里只做简单的方法演示)
preg_match(‘/^([a-z\-]+)/i’, $_SERVER[‘HTTP_ACCEPT_LANGUAGE’], $matches);
$lang = $matches;
switch ($lang) {
       case ‘zh-cn’ :
               header(‘Location: http://forfly.net/cn-index.htm’);
               break;
       default:
               header(‘Location: http://www..forfly.net’);
               break;
}
?>

 上述不打断,估计去掉default之后的也能用,如果有其他的语言需要判断,可以继续添加CASE 格式。此方法是判断所有的值,不是取了两位,故还应添加繁体等。

<?php
$lang = substr($_SERVER[‘HTTP_ACCEPT_LANGUAGE’], 0, 2);
 switch ($lang){
      case “zh”:         //echo “PAGE FR”;
       include(“www..forfly.net/cn-index.htm”);//include check session FR        
    break;
    default:         //echo “PAGE EN – Setting Default”;      
    include(“www.forfly.net/index.htm”);//include EN in all other cases of different lang detection      
    break; }
?>

 上述不打断,估计去掉default之后的也能用

<?php
$lang = substr($_SERVER[‘HTTP_ACCEPT_LANGUAGE’], 0, 2);
if($lang==”zh”) header(“location:cn-index.htm”);
else header(“location:www..forfly.net”);

?>

 上述不打断,故去掉了else之后的所有。
<?php
$lang = substr($_SERVER[‘HTTP_ACCEPT_LANGUAGE’], 0, 2);
 switch ($lang){
      case “zh”:  //echo “PAGE FR”;
       header(location:http://www..forfly.net/cn-index.htm);//include check session FR        
    break;
    default:         //echo “PAGE EN – Setting Default”;      
    header(location:http://www..forfly.net/index.htm);//include EN in all other cases of different lang detection      
    break; }
?>

同样问题,不打断。去掉default之后的。

原创帖子,转载请注明,谢谢,地址:http://forfly.net/life-marking/wordpress根据不同语言访问不同网页.htm。

2012-01-17
关键字:
暂无评论

发表回复