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。