前面老古已经分享了『WordPress 通用站点+宝塔面板创建百度支持的 xml 地图文件』,不过这个好代码教程仅适用于没有自定义文章的 WordPress 站点,而 boke112 联盟的问答文章却是自定义文章,所以需要稍作修改后才能正常使用,下面 boke112 联盟将其代码进行加工后支持自定义文章的 xml 地图好代码教程分享给大家(PS:老古使用的是阿里云 ECS 服务器,环境是 Nginx)。
一、将以下代码添加到 baidu_sitemap.php 文件(文件名可自定义),并将该文件上传到站点根目录中。
<?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/">' ?> <!-- generated-on=<?php echo get_lastpostdate('blog'); ?> Diy By 张戈博客(https://zhang.ge)--> <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 /* 输出普通文章 POST */ $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 /* 输出问答文章 wenda */ $myposts = get_posts( "post_type=wendapost&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 /* 输出问答文章分类 */ $terms = get_terms('wendafenlei', '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 /* 输出问答文章标签(可选) */ $terms = get_terms('wendatag', '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.4</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>
代码特别说明:
- 以上代码基于张戈博客分享的『WordPress 免插件生成完整站点地图(sitemap.xml)的 php 代码』一文的代码进行加工,并改正 GMT 错误。
- 第 5 行代码中的$posts_to_show 就是显示多少篇文章,如果想要全部显示完,直接将其改为 10000 甚至更大的值。
- 第 9 行代码意义不大,只是说明这个代码来自张戈博客。
- 第 27-37 行代码就是输出自定义文章,其中第 29 行的 wendapost 就是自定义文章的类型,这个必须改为自己站点自定义文章对应的类型。如果有多个不同类型的自定义文章就重复添加第 27-37 行代码,记得修改自定义文章类型即可,没有自定义文章就直接删除即可。
- 第 62-73 行代码就是输出自定义文章的分类,其中第 64 行的 wendafenlei 就是自定义文章的分类 slug,记得修改为自己站点对应的自定义文章分类 slug。如果有多个不同类型的自定义文章分类就重复 62-73 行代码(PS:记得修改对应的 slug),没有就直接删除即可。
- 第 74-85 行代码就是输出自定义文章的标签,其中第 76 行的 wendatag 就是自定义文章的标签 slug,记得修改为自己站点对应的自定义文章标签 slug。如果有多个不同类型的自定义文章标签就重复 74-85 行代码(PS:记得修改对应的 slug),没有就直接删除即可。
二、成功添加了 baidu_sitemap.php 文件后,我们就可以直接访问该文件看看效果了。不过我们提交到百度的文件是 xml 格式文件,所以我们可以通过伪静态或纯静态的方式实现让其变成 xml 格式文件,成功之后的 xml 站点地图文件路径为:站点地址/baidu_sitemap.xml。
方法一:伪静态
因为老古的服务器用的是 Nginx,所以至二级编辑现有的配置文件,添加以下规则保存文件后平滑重启 Nginx 即可。
rewrite ^/baidu_sitemap.xml$ /baidu_sitemap.php last;
PS:根据张戈博主的好代码教程,如果你服务器用的是 Apache,只需要编辑网站根目录的 .htaccess ,加入如下规则并保存即可:
RewriteRule ^(baidu_sitemap)\.xml$ $1.php
方法二:纯静态
利用 Linux 定时任务+wget 定时生成 baidu_sitemap.xml 并存放到网站根目录就可以了!比如:
HTTP 站点:每天凌晨 1 点在网站根目录生成一个 baidu_sitemap.xml
0 1 * * * wget -O /home/wwwroot/zhang.ge/baidu_sitemap.xml http://zhang.ge/baidu_sitemap.php >/dev/null 2>&1
HTTPS 站点:每天凌晨 1 点在网站根目录生成一个 baidu_sitemap.xml
0 1 * * * wget -O /home/wwwroot/zhang.ge/baidu_sitemap.xml --no-check-certificate https://zhang.ge/baidu_sitemap.php >/dev/null 2>&1
当然,如果你的服务器上安装有宝塔 Linux 面板的话,就不用那么麻烦,只需要登录宝塔面板 >> 计划任务 >> 任务类型选择 Shell 脚本 >> 任务名称可随意 >> 执行周期建议每天凌晨执行 1 次即可 >> 脚本内容输入以下代码(PS:记得修改代码中的名称及路径哦) >> 点击【添加任务】按钮即可。
如果站点是 http 则添加以下代码:
wget -O /www/wwwroot/wp.yigujin.wang/sitemap.xml http://wp.yigujin.wang/sitemap.php
如果站点是 https 则添加以下代码:
wget -O /home/wwwroot/wp.yigujin.wang/sitemap.xml --no-check-certificate http://wp.yigujin.wang/sitemap.php
总结
本文的内容看起来很多,其实可以简化为两步:一是建立一个 sitemap.php 文件,另一个就是进行伪静态或静态化。如果你的 WordPress 站点没有任何类型的自定义文章,云服务器也安装有宝塔 Linux 面板,建议参考『WordPress 通用站点+宝塔面板创建百度支持的 xml 地图文件』这篇文章更简单一些。
以上就是WordPress纯代码生成百度支持的XML站点地图(含自定义文章)。部下的素质低,不是你的责任;但不能提高部下的素质,是你的责任。更多关于WordPress纯代码生成百度支持的XML站点地图(含自定义文章)请关注haodaima.com其它相关文章!