修正Baidu Sitemap Generator输出文章类型异样的BUG

使用Baidu Sitemap Generator之后,发现生成的sitemap里包含我以前发表的post_type为公告的旧文章,而这些文章点进去又都是404,
这是有段时间我自定义了一个文章类型为公告(使用过hotnewspro主题的同学应该能明白,就是在adminbar的新建条目下会有"公告"一栏,在公告类型下发表的文章的post_type就是Bulletin)
但是后来我把公告栏改为抓取页面评论,之前的公告类型就扔了,但其中的文章并未从数据库中删除,因此post_type='bulletin'这个文章类型仍然存在,只是由于主题函数里删除了自定义的文章类型,所以除非再次创建bulletin文章类型,否则点进去都是404,
但Baidu Sitemap Generator生成的文件包括xml和html)都把这些公告包含进去了,如果蜘蛛爬过来又只能得到404,无疑是对seo最大的破坏了,
经过检查插件文件,找到了问题所在:
在baidu_sitemap.php的148行(定义sitemap_baidu.xml的)有一句:

AND (post_type != 'revision' AND post_type != 'attachment' AND post_type != 'nav_menu_item')

224行(定义sitemap.html的)有一句:

AND (post_type != 'revision' AND post_type != 'attachment' AND post_type != 'nav_menu_item' AND post_type != 'page')

这句查询条件的意思是抓取post_type不是revision(修订版本),attachment(附件)和nav_menu_item(菜单栏目)的文章
wordpress官方文档里有对post_type基本类型的描述,一般分为:

    1. page
    2. attachment
    3. revision
    4. nav_menu_item

这里柳城的出发点是好的,他排除了revision和nav_menu_item,以便有自定义文章类型的同学可以生成所有文章,但是如果有的同学和我一样之前删除过文章类型而又没有删除文章,就会造成输出异常了,
解决方法是把148行的改成

AND (post_type = 'post' || post_type = 'page')

224行的改成

AND (post_type = 'post')

如果存在自定义文章类型的同学,这句需要改成

AND (post_type = 'post' || post_type = 'page' || post_type = '你的自定义文章类型名称:如bulletin')

这样一来可以防止生成数据库中的冗余数据,也保证了正常文章的输出

15 Comments

Name *

E-mail *

Website

  1. 凤翼天堂

    果然是大技术宅啊……不过重写按钮重叠的问题仍在……我基本没用插件

  2. DickWu

    新年快乐哦~~~

    • 小蝴蝶

      新年快乐娃~魔方造好了没啊

  3. 郑永

    自己动手丰衣足食啊。

    • 小蝴蝶

      @郑永 : 恩恩 捡来的比不上亲生的好啊 :xiao:

      • 郑永

        @小蝴蝶 : 刚好看到一则新闻,说一个父亲捡到一个孩子却在广播里听到有人寻这个孩子。

  4. 创意产品

    强大啊,技术大牛。