首发于好软发现

WordPress纯代码生成完整站点地图(sitemap.xml)应用

Sitemap.xml的重要性无须多讲了,虽然是小站,但站点地图必不可少的。一方面方便搜索引擎来抓取,一方面也让自己了解相应的站点情况。一图在手,小站我有。前期是使用水煮鱼的wpjam-basic插件中SEO设置中的如果博客支持并开启固定链接,自动生成 robots.txt 和 sitemap.xml来生成xml地图的。但明显存在的一个缺陷是仅生成了首页跟文章页,还有众多的文章分类页、标签页、单页面等等没有的。前期也一直想改一下,但水煮鱼的这个插件还是挺好用的,不想废掉,直接改插件的代码又大费周章(明显是不会)的。今天看到张戈的文章zhang.ge/4554.html 怎么去做伪静态,纯静态的,突然想到了这个方法,实践了一下,完全可行。



一、PHP代码
本代码绝大部分来自于这里zhang.ge/4554.html ,当然也因为本地出错了一下,简单做了修改:

<!--?php
require('./wp-blog-header.php');
header("Content-type: text/xml");
header('HTTP/1.1 200 OK');
$posts_to_show = 1000; 
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">'
?>
<!-- 生成于=<?php echo get_lastpostdate('blog'); ?> 程门立学https://www.iappi.cn-->
  <url>
      <loc>
	  <?php echo get_home_url()?></loc>
      <lastmod><?php $ltime = get_lastpostmodified(GMT);$ltime = gmdate('Y-m-d\TH:i:s+00:00', strtotime($ltime)); echo $ltime; ?></lastmod>
      <changefreq>daily</changefreq>
      <priority>1.0</priority>
  </url>
<?php
/* 文章页面 */ 
$myposts = get_posts( "numberposts=" . $posts_to_show );
foreach( $myposts as $post ) { ?>
  <url>
      <loc><?php the_permalink(); ?></loc>
      <lastmod><?php the_time('c') ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
  </url>
<?php } /* 文章循环结束 */ ?>  
<?php
/* 单页面 */ 
$mypages = get_pages();
if(count($mypages) > 0) {
    foreach($mypages as $page) { ?>
    <url>
      <loc><?php echo get_page_link($page->ID); ?></loc>
      <lastmod><?php echo str_replace(" ","T",get_page($page->ID)->post_modified); ?>+00:00</lastmod>
      <changefreq>weekly</changefreq>
      <priority>0.6</priority>
  </url>
<?php }} /* 单页面循环结束 */ ?> 
<?php
/* 博客分类 */ 
$terms = get_terms('category', 'orderby=name&hide_empty=0' );
$count = count($terms);
if($count > 0){
foreach ($terms as $term) { ?>
    <url>
      <loc><?php echo get_term_link($term, $term->slug); ?></loc>
      <changefreq>weekly</changefreq>
      <priority>0.8</priority>
  </url>
<?php }} /* 分类循环结束 */?> 
<?php
 /* 标签(可选) */
$tags = get_terms("post_tag");
foreach ( $tags as $key => $tag ) {
	$link = get_term_link( intval($tag->term_id), "post_tag" );
	     if ( is_wp_error( $link ) )
		  return false;
		  $tags[ $key ]->link = $link;
?>
 <url>
      <loc><?php echo $link ?></loc>
      <changefreq>monthly</changefreq>
      <priority>0.4</priority>
  </url>
<?php  } /* 标签循环结束 */ ?> 
</urlset></pre-->

主要修改第11行:

<loc><?php echo get_home_url(//res.zgboke.com/wp-content/plugins/custom-plugin/img/random/10.jpg); ?></loc>


不知道为什么这里会要引入一张完全无关的图片进来,然后报错,直接删除了就行了。
二、部署:
PHP文件有了,直接访问也可以生成地图了,但是还是PHP后缀的格式,这时候需要转换成xml,而且要伪静态化,并要将原来的wpjam-basic插件生成的sitemap禁用掉。如果单纯的停用插件的SEO设置呢,倒是没有了sitemap这个功能,但同时的SEO优化也没有了。另外张戈这个sitemap.php还得另外把它静态化,还得整一次。这里就利用了“李代桃僵”的方式,找到wpjam-basic插件生成的sitemap的代码,把它屏蔽掉,然后再利用插件本身的静态化规则,生成了sitemap.xml文件到网站的根目录。
要找到插件的sitemap代码也比较简单,翻到文件夹里面,就找到了sitemap.php文件,注意到这个插件有2个同名文件的。实际生效的文件是wpjam-basic\old\template\sitemap.php这个,重命名下,再把张戈那个PHP文件复制过来。打开iappi.cn/sitemap.xml一看,已经刷新成功了。



然后到百度资源平台上看看这个sitemap是不是能被识别成功。




手动更新后,提取到了132个URL,比之前的足足多了56个。
当然,前期没有在sitemap里面的链接,搜索引擎也是同样抓取、索引的。只是这次sitemap全部给概括进来了。


更多:

WordPress纯代码生成完整站点地图(sitemap.xml)应用www.iappi.cn图标

发布于 2019-06-25

文章被以下专栏收录