WordPress无插件实现绑定手机域名+自动跳转+禁止百度转码

19

本来是要把这个写成插件的,但是如果页面被缓存之后hyper-cache会跳过插件的部分直接执行缓存,所以要在hyper-cache之前来执行,可以把它放到wp-config.php中去,复制到define('ABSPATH', dirname(__FILE__) . '/');require_once(ABSPATH . 'wp-settings.php');之间的位置就可以了。

缓存插件识别会比较混乱,所以需要在m.xiumu.org生效的时候禁用hyper-cache,编辑hyper-cache/cache.php文件,在头部加入

if (defined('MOBILE_THEME')) return hyper_cache_exit();


wordpress-mobile

当访客访问www.xiumu.org时,会判断浏览器是否为手机,来跳转到m.xiumu.org,而当访客访问m.xiumu.org的时候,会为它指定一个模板目录显示与www不同的界面。

与此同时当来路是百度转码蜘蛛的时候,会跳转到自有手机页面,设置好后可以到百度移动开放平台测试一下,如果提示网站暂时无法访问,请选择"重新加载"或进入"原网页",那就说明可以成功跳转了。

暂时没有在调试过程中发现其他问题。

主要代码部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*根据浏览器跳转*/
define ('MOBILE_DOMAIN', 'm.xiumu.org');
define ('REAL_DOMAIN', 'www.xiumu.org');
 
if ($_SERVER['SERVER_NAME'] == MOBILE_DOMAIN) {
	define('WP_HOME' ,'http://' . MOBILE_DOMAIN);
	define('WP_SITEURL',WP_HOME);
	define('TEMPLATEPATH', ABSPATH .'wp-content/themes/Ripple_mobile/');
	define('STYLESHEETPATH', ABSPATH .'wp-content/themes/Ripple_mobile/');
 
	define ('MOBILE_THEME', true);
}elseif(strpos($_SERVER['HTTP_USER_AGENT'],'baidu Transcoder')){ //百度转码跳转
	header('Location: '. 'http://' . MOBILE_DOMAIN . $_SERVER["REQUEST_URI"]);
	die();
}else{
 
	if (!empty($_GET['m_action'])) {
		if ($_GET['m_action'] == 'nomobile') {
			setcookie('wordpress_mobile_domain_disable', 1, time()+86400, '/', REAL_DOMAIN, false);
			if (!empty($_SERVER['HTTP_REFERER'])) {
				$go = str_replace(MOBILE_DOMAIN, REAL_DOMAIN, $_SERVER['HTTP_REFERER']);
				header ('location:'.$go);
				die();
			} else {
				header ('location:'.REAL_DOMAIN);
				die();
			}
		}
	}
	$browsers = array (
			'Googlebot-Mobile',
			'Opera Mini',
			'iPhone',
			'BlackBerry',
			'iPod',
			'Android',
			'Bolt',
			'IEMobile',
			'GoBrowser',
			'Skyfire',
			'TeaShark',
			'UC Browser',
			'UCWEB',
			'Opera Mobi',
			'Mobile Safari',
			'SEMC-Browser',
			'Teleca',
			'Series60',
			'Doris',
			'2.0 MMP',
			'240x320',
			'400X240',
			'AvantGo',
			'Blazer',
			'Cellphone',
			'Danger',
			'DoCoMo',
			'Elaine 3.0',
			'EudoraWeb',
			'hiptop',
			'KYOCERA WX310K',
			'LG U990',
			'MIDP-2.',
			'MMEF20',
			'MOT-V',
			'NetFront',
			'Newt',
			'Nintendo Wii',
			'Nitro',
			'Nokia',
			'Palm',
			'PlayStation Portable',
			'ProxiNet',
			'SHARP-TQ-GX10',
			'SHG-i900',
			'Small',
			'SonyEricsson',
			'Fennec',
			'TS21i-10',
			'UP.Browser',
			'UP.Link',
			'Windows CE',
			'WinWAP',
			'LG-TU915 Obigo',
			'LGE VX',
			'Iris',
			'Maemo Browser',
			'MIB',
			'Kindle Basic Web',
			'Myriad Browser',
			'Obigo Browser',
			'Polaris Browser',
			'uZardWeb',
			'WebOS',
			'Deepfish',
			'Dolphin',
			'Firefox Mobile',
			'ibisBrowser',
			'JOCA',
			'Links',
			'Minimo',
			'Pixo',
			'Skweezer',
			'Steel',
			'Tristit',
			'Vision Mobile Browser',
			'Dorothy',
			'Ovi Browser'
		);
	foreach($browsers as $browser) { 
		if (preg_match("/".$browser."/i", $_SERVER['HTTP_USER_AGENT'])) {
			if (!isset($_COOKIE['wordpress_mobile_domain_disable'])) {
				header ('location:http://' . MOBILE_DOMAIN . $_SERVER['REQUEST_URI']);
				die();
			}
		}
	}
}

共 19 条评论

  1. 回复

    把这些代码放到header.php里面,可是手机打开一个页面比如文章页面http://www.XXX.com/10723.html 页面后,是可以跳转到m.XXX.com但是,不是相应的文章页面http://m.XXX.com/10723.html 页面,这是为何

  2. 回复

    很详细的手机域名教程

  3. 回复

    使用遇到了点问题,为什么category.php手机主题的模板和电脑主题的模板冲突了

    • 回复

      是否开启了缓存插件?

  4. 回复

    这个升级了就要修改了吧

    • 回复

      因为我用了hyper cache所以要在返回缓存数据之前调用这个,如果没有用这个可以直接写入模板文件,升级就不会丢失了。

  5. 回复

    知道是为什么错了location 指定了文档的 Web 路径,但是我的文件不放在location 这个固定的路径,这个怎么改呢?

  6. 回复

    域名可以跳转,可是页面无法打开,手机版的主题路径是没有错的~
    这个怎么回事?求教~

    显示错误:Forbidden

    You don’t have permission to access / on this server.

  7. 回复

    强制转码是赤裸裸的掠夺!!!

  8. 回复

    谢谢。很实用的教程。有个问题,如果没装 hyper-cache,这段代码该怎么样用?写到 header.php中?

    • 回复

      也行,不过最好能写一个空白插件

  9. 回复

    您好!响应式设计的网站该怎莫禁止百度转码呢?

    • 回复

      请仔细阅读下这个 http://m.baidu.com/pub/help.php?pn=20&bd_page_type=1

  10. 回复

    博主求救 ,我想禁止百度转码,整了半天实现不了。网页是响应式设计,不想让百度转码。我快崩溃了。对了,我的建站系统是织梦

  11. 回复

    这个可以指定以个 手机主题吗?
    当客户访问 www.xxx.com/xxx 时候,会跳转到 m.xxx.com/xxx 吗
    还是只能跳转到手机版的主页

    • 回复

      都可以实现.

      • 回复

        怎么实现呢

  12. 回复

    define(‘TEMPLATEPATH’, ABSPATH .’wp-content/themes/Ripple_mobile/’);
    define(‘STYLESHEETPATH’, ABSPATH .’wp-content/themes/Ripple_mobile/’);

    这两句代码貌似没起作用。手机版的css加载不了。

    • 回复

      我的手机版CSS路径是写的绝对路径

      • 回复

        我也自己改了绝对路径,博主给的代码不全,从电脑版文章页底部的链接进入手机版,会到手机版首页。

        自己把对应的代码修改了一下,弄好了。

        其实我们也可以用同样的原理是ie6进入手机版的主题。

        • 回复

          额? 是吗,我的站没问题啊,当时是一边写文章一边弄的

          • 你的确实没有问题,我昨天自己加上后不能完美跳转,不过自己修改好了

  13. 回复

    能与hyper-cache完美兼容?也就是说普通浏览使用hyper-cache缓存,手机浏览不实用缓存,而且在hyper-cache设置里边不需要开启兼容手机的选项?

小林博客进行回复 X

您的邮箱不会公开,当您的评论有新的回复时,会通过您填写的邮箱向您发送评论内容。 必填字段 *

为何看不到我发布的评论?

正在提交, 请稍候...