WordPress for SAE 下搞定网站地图

时间:2012年12月24日 23:35 星期一 栏目:未分类 作者: 评论:24 点击: 2,862 次

关于“网站地图”就不多做科普了,本文章具体是搞定三种网站地图:一种是给人看的,一种是给Goolge之类搜索引擎看的,还有一种是给百度看的。

用到的是两个插件:baidu-sitemap-generator 和 google-sitemap-generator

其中google-sitemap-generator在 WP4SAE里有集成,且已经移植好的,可以直接使用,但是新版本我还是用不好,改用旧版本,google-sitemap-generator可以在这里下载:http://wp4sae.org/2011/06/google-xml-sitemaps-for-sae-release/

baidu-sitemap-generator可以在这里下载:
http://wordpress.org/extend/plugins/baidu-sitemap-generator/
但是这个需要移植后才可以用于SAE,移植方式等下再说。为什么要移植呢?因为在SAE平台下,不能直接对网站目录里的文件进行读写,而网站地图一般是要生成一个文件放在网站的根目录里,所以,在SAE平台下只能把文件写到Storage里,然后把根目录下的文件名rewrite到实际的地图文件上。

首先移植baidu-sitemap-generator:
修改插件根目录下的“baidu_sitemap.php”,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 	if($xml_contents){
		$baidu_xml = $xml_begin.$xml_home.$xml_contents.$xml_end;
 
		/** save XML file as sitemap_baidu.xml **/
		$GetHomePath = GetHomePath();
		$filename = $GetHomePath.'sitemap_baidu.xml';
		if( IsFileWritable($GetHomePath) || IsFileWritable($filename) ){ 
			file_put_contents("$filename","$baidu_xml"); 
			@chmod($filename, 0777);
			/** Messages  **/
			baidu_sitemap_topbarmessage(__('Congratulate, Build the XML file success','baidu_sitemap'));
		}else{ 
			/** Messages  **/
			baidu_sitemap_topbarmessage(__('Directory is not writable. please chmod your directory to 777.','baidu_sitemap'));
		}
	}

换成

1
2
3
4
5
6
7
8
 	if($xml_contents){
		$baidu_xml = $xml_begin.$xml_home.$xml_contents.$xml_end;
 
		/** save XML file as sitemap_baidu.xml **/
		$GetHomePath = GetHomePath();
      $filename="saestor://wordpress/sitemap_baidu.xml";
      file_put_contents($filename,$baidu_xml);
	}

1
2
3
4
5
6
7
8
 	$GetHomePath = GetHomePath();
	$filename_html = $GetHomePath.'sitemap.html';
	if( IsFileWritable($GetHomePath) || IsFileWritable($filename_html) ){ 
		file_put_contents("$filename_html","$html");
		@chmod($filename_html, 0777);
		/** Messages  **/
		/*baidu_sitemap_topbarmessage(__('Congratulate, Build the Html file success','baidu_sitemap'));*/
	}

换成

1
2
3
4
5
 	$GetHomePath = GetHomePath();
	$filename_html = "saestor://wordpress/sitemap.html";
		file_put_contents("$filename_html","$html");
				/** Messages  **/
		/*baidu_sitemap_topbarmessage(__('Congratulate, Build the Html file success','baidu_sitemap'));*/

这样就移植完成了,把原本生成于网站根目录下的两个文件“sitemap_baidu.xml”与“sitemap.html”改为生成到Storage里。

然后就是让访问网站的根目录下网站地图可以访问到对应生成在Storage里的文件,例如“http://s.mile77.com/sitemap_baidu.xml”实际访问到的是“http://cailman-wordpress.stor.sinaapp.com/sitemap_baidu.xml”的内容。

在网站根目录下创建文件:sitemap_baidu.php,输入代码:

1
2
3
4
5
6
7
8
<?php
header("Content-Type:text/xml ");
//html文件要用下面这个头,不然在某些浏览器会显示空白。
//header('Content-type:text/html; charset=utf-8'); 
$f = new SaeFetchurl();
$data = $f->fetch("http://cailman-wordpress.stor.sinaapp.com/sitemap_baidu.xml");
echo $data;
?>

注意把文件地址改成你的地址。

然后在网站根目录下的config.yaml 添加一行代码:

1
 - rewrite:  if ( path ~ "sitemap_baidu.xml" ) goto "sitemap_baidu.php"

这句代码的意思是当访问“sitemap_baidu.xml”的时候,改由“sitemap_baidu.php”来执行,而“sitemap_baidu.php”里的代码前面已经写过了,就是把Stroge里的内容读出来输出。

这样照例同样的方法把网站根目录下的“sitemap.xml”和"sitemap.html"对应到Stroge里的“sitemap.xml”和"sitemap.html"就OK啦。

到这里就基本上结束了。

然后就是把网站地图的链接添加到footer.php里或robots.txt里。

参考文章:
http://lab.i-xider.com/archives/wp4saegooglesitemap.html
http://www.chinaz.com/web/2011/1122/221974.shtml

相关文章

WordPress for SAE 下搞定网站地图:目前有24 条留言

  1. 好久没更新啦

    2014-08-15 14:27
  2. 5楼
    柳城:

    SAE里有没有提到有什么方法是可以判断现在所用的空间是SAE的呢??如果可以的话,我就直接写进插件,判断为是在用SAE时,改用SAE的路径就好了。

    2012-12-26 17:23
    • IS_SAE下面的代码在SAE下输出加粗的“Welcome to SAE!”,我现在没有其它环境的PHP,你可以试下。<?phpif (IS_SAE){echo ‘Welcome to SAE!‘;}?>

      2012-12-26 17:48
  3. 4楼
    柳城:

    另,支持SAE的修改方法不用这么复杂。打开sitemap-function.php在$res=””;前加入一句:return “saestor://wordpress/”;其它不用修改。

    2012-12-26 17:21
    • 还有在clearstatcache();下面添加一句:if(preg_match(“/saestor:/”,$filename)){ return true; }

      2012-12-26 17:30
    • 目前已经达到我的目的了,在新建或修改文章的时候更新就行了,定时更新没必要。谢谢你的解答。

      2012-12-26 17:51
  4. 地板
    柳城:

    我留言看看会不会更新。。。

    2012-12-26 11:22
    • 我刚刚留言N次,基本上留言就会更新,而且留言好像不是唯一的触发条件。不留言也会更新。现在没找到正确的原因。后台选项有“当发布文章时更新Sitemap”勾不勾都一样。

      2012-12-26 11:26
      • 上面两个留言之后都没见有更新啊??

        2012-12-26 11:30
        • 由于没有找到原因,所以我暂时把插件关了,我现在打开,你可以再试试。

          2012-12-26 11:32
        • 现在来看,好像打开贴子就会导致更新。到底怎么触发的百思不得其解。

          2012-12-26 11:40
        • 把“add_action(‘init’,’baidu_sitemap_is_auto_daily’,1001,0);”注释掉后好像停止更新了。我再观察一段时间。

          2012-12-26 13:02
          • 把 $lc_updatePeri = $lc_updatePeri*60*60*24; 改为 $lc_updatePeri = 60*60*24;~~~不小心既然有了这种BUG。。。

            2012-12-26 14:00
  5. 板凳
    柳城:

    改掉的部分并没有问题啊。 后台选项有“当发布文章时更新Sitemap”如果其它没有改过的话,也不会2小时更新一次,原来也是24小时更新一次的。。

    2012-12-26 08:56
    • 那个选项有勾上,代码的其它地方没改动。不是2小时更新一次,而是几分钟更新一次,现在正在研究测试中。

      2012-12-26 09:13
    • 初步的测试结果,貌似跟回贴有点关系,而且回复并不是唯一的触发条件。反正几十秒到十分钟随时都有可以生成一次地图文件。

      2012-12-26 10:09
  6. 2012-12-25 10:22

发表评论

您必须 [ 登录 ] 才能发表留言!

Baidu提供的广告

最近访客

    最新评论