wordpress自动生成“站点地图”PHP代码

wordpress虽然说有百度地图插件:Baidu Sitemap Generator 和谷歌地图插件:Google XML Sitemaps;虽然说现在百度地图插件已经不更新了,用的人也就更加的少了;但是:用wordpress第三方开的插件是有缺点的。缺点就是站点地图模板不能自定义;

 

无论你是用百度地图插件,还是用谷歌地图插件,它们生成的都是XML格式的站点地图;这两款插件仅仅是用来给搜索引擎蜘蛛看的。如果要想给用户看的话,我们需要生成html或直接以php格式显示;这就需要用到PHP代码;如下:

  1. <?php
  2. require('./wp-blog-header.php');
  3. header("Content-type: text/xml");
  4. header('HTTP/1.1 200 OK');
  5. $posts_to_show = 1000;
  6. echo '<?xml version="1.0" encoding="UTF-8"?>';
  7. echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">'
  8. ?>
  9. <!-- generated-on=<?php echo get_lastpostdate('blog'); ?> Diy By 付杰博客(http://www.fujieace.com)-->
  10. <url>
  11.       <loc><?php echo get_home_url(); ?></loc>
  12.       <lastmod><?php $ltime = get_lastpostmodified(GMT);$ltime = gmdate('Y-m-d\TH:i:s+00:00', strtotime($ltime)); echo $ltime; ?></lastmod>
  13.       <changefreq>daily</changefreq>
  14.       <priority>1.0</priority>
  15.   </url>
  16. <?php
  17. /* 文章页面 */
  18. $myposts = get_posts( "numberposts=" . $posts_to_show );
  19. foreach$myposts as $post ) { ?>
  20.   <url>
  21.       <loc><?php the_permalink(); ?></loc>
  22.       <lastmod><?php the_time('c') ?></lastmod>
  23.       <changefreq>monthly</changefreq>
  24.       <priority>0.6</priority>
  25.   </url>
  26. <?php } /* 文章循环结束 */ ?>
  27. <?php
  28. /* 单页面 */
  29. $mypages = get_pages();
  30. if(count($mypages) > 0) {
  31.     foreach($mypages as $page) { ?>
  32.     <url>
  33.       <loc><?php echo get_page_link($page->ID); ?></loc>
  34.       <lastmod><?php echo str_replace(" ","T",get_page($page->ID)->post_modified); ?>+00:00</lastmod>
  35.       <changefreq>weekly</changefreq>
  36.       <priority>0.6</priority>
  37.   </url>
  38. <?php }} /* 单页面循环结束 */ ?>
  39. <?php
  40. /* 博客分类 */
  41. $terms = get_terms('category', 'orderby=name&hide_empty=0' );
  42. $count = count($terms);
  43. if($count > 0){
  44. foreach ($terms as $term) { ?>
  45.     <url>
  46.       <loc><?php echo get_term_link($term$term->slug); ?></loc>
  47.       <changefreq>weekly</changefreq>
  48.       <priority>0.8</priority>
  49.   </url>
  50. <?php }} /* 分类循环结束 */?>
  51. <?php
  52.  /* 标签(可选) */
  53. $tags = get_terms("post_tag");
  54. foreach ( $tags as $key => $tag ) {
  55.     $link = get_term_link( intval($tag->term_id), "post_tag" );
  56.          if ( is_wp_error( $link ) )
  57.           return false;
  58.           $tags$key ]->link = $link;
  59. ?>
  60.  <url>
  61.       <loc><?php echo $link ?></loc>
  62.       <changefreq>monthly</changefreq>
  63.       <priority>0.4</priority>
  64.   </url>
  65. <?php  } /* 标签循环结束 */ ?>
  66. </urlset>

 

以上代码就是wordpress整站网站地图的PHP代码,我想说的是,以上的代码你可以用来做给搜索引擎蜘蛛看的xml代码,也可以用来做给用户看的“网站地图”代码;同样还可以修改整个代码的结构;不知道有没有人用过百度站内搜索,百度站内搜索有一个”结构化数据“,用以上的代码可以做一个网站百度站内搜索”结构化数据xml"文件;当然,也可以做一个搜狗“结构化数据xml”文件,360好搜“结构化数据xml“文件;

 

唯一不同的是,只需要根据以上的代码增删代码仅此而已,做相应的调整。如果你也是用的wordpress,你想自定义生成站点地图,而你又不懂PHP代码,可以完全来联系我,免费帮助各位;

 

百度站内搜索“结构化数据xml“PHP代码实例:

1、新建sitemap.php文件,新增代码如下:

  1. <?php
  2. require('./wp-blog-header.php');
  3. header("Content-type: text/xml");
  4. header('HTTP/1.1 200 OK');
  5. $posts_to_show = 1000;
  6. echo '<?xml version="1.0" encoding="UTF-8"?>';
  7. echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">'
  8. ?>
  9. <?php
  10. /* 文章页面 */
  11. $myposts = get_posts( "numberposts=" . $posts_to_show );
  12. foreach$myposts as $post ) { ?>
  13.   <url>
  14.       <loc><?php the_permalink(); ?></loc>
  15.       <lastmod><?php the_time('c') ?></lastmod>
  16.       <changefreq>always</changefreq>
  17.       <priority>0.6</priority>
  18.       <data>
  19.             <display>
  20.                 <title><?php the_title(); ?></title>
  21.                 <content><?php the_content(); ?></content>
  22.                 <tag></tag>
  23.                 <pubTime><?php the_time('Y-m-d\TH:i:s') ?></pubTime>
  24.                 <breadCrumb title="" url=""/>
  25.                 <breadCrumb title="" url=""/>
  26.                 <thumbnail loc=""/>
  27.                 <image loc=""/>
  28.             </display>
  29.         </data>
  30.   </url>
  31. <?php } /* 文章循环结束 */ ?>
  32. </urlset>

 

wordpress百度站内搜索结构化数据xml样式

因为这是PHP文件,百度站内搜索“结构化数据 ”需要的是xml结尾格式的文件,因此我们需要做伪静态;

 

2.1、nginx伪静态代码:编辑nginx.conf文件

rewrite ^/sitemap.xml$ /sitemap.php last;

 

2.2、apache伪静态代码:编辑根目录 .htaccess 文件

RewriteRule ^(sitemap)\.xml$ $1.php

 

3、重启

nginx做了伪静态后,必须重启nginx;

 

当然,这个PHP代码还是有缺点的,例如:不能自动更新,如果让用户经常访问我们这个PHP文件,它会大量的去查询,去请求数据库,这样也是不好的;防止用户恶意请求文件,我们可以用wordpress缓存插件;自动更新如果你是linux可以用shell定时器,当然也可以手工定时来访问一下PHP文件;毕竟对于绝大多数人来说,手工访问是最省时省力的方法。

 

博主这个网站我是没有做给用户看的网站地图的,只是做了级搜索引擎蜘蛛看的站点地图,用的插件是:Google XML Sitemaps;因为由于我开启了wordpress多站点功能,百度对我网站的索引量又太过慢,我需要利用百度的站内搜索来让用户搜索我整个网站的内容,因为我用以上的PHP代码制做出来了百度结构化数据;

 

当然博主用了一个极其笨的办法,用PHP代码文件生成xml后,我再另存为xxx.xml文件,这样再提交给百度站内搜索;这样就防止用户恶意请求我的php为文件;毕竟结构化数据,我一个月手工更新一次,甚至是更长时间那也是可以的;

 

为什么我这么说呢?

因为我百度站内搜索“结果样式模板“我开启了”网页样式“和”通用样式“两种样式;程序开发就是这样,有时候并不一定就需要用技术去解决问题,有时候换一个简单的方法反而会更加的好;

    A+
发布日期:2017年02月24日 14:41:27  所属分类:WordPress
最后更新时间:2017-02-24 15:18:48
评分: (当前没有评级)
付杰
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
  • ¥ 199.9元
  • 市场价:20000元
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
  • ¥ 9.9元
  • 市场价:49.9元
花牛苹果 甘肃天水 李宏恩家自种 1斤 包邮
花牛苹果 甘肃天水 李宏恩家自种 1斤 包邮
  • ¥ 6.8元
  • 市场价:8.8元
服务器管理面板/主机控制面板“安装”服务
服务器管理面板/主机控制面板“安装”服务
  • ¥ 9.9元
  • 市场价:49.9元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  1   博主  1

  1. 付杰 付杰

    以上百度站内搜索“结构化数据”php文件代码是不完整的;
    第一:描述没有,这肯定是不行的。这是因为wordpress自带的代码描述只有一个才有效;而且需要手工添加描述,这样每次增加文章太麻烦;
    第二:缩略图没有,这当然是不行的,标题,描述,缩略图这三点这是必须有的,要不我们做这个站内搜索做什么呢?
    昨晚思考了很久,解决方案如下:
    1、安装wordpress自动摘要插件:WP CN Excerpt;
    2、修改为< ?php the_excerpt();?>
    3、修改为

    1. <thumbnail loc=“<?php  
    2.            $content = $post->post_content;   
    3.            preg_match_all(‘/<img.*?(?: |\\t|\\r|\\n)?src=[\'”]?(.+?)[\’“]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim’, $content, $strResult, PREG_PATTERN_ORDER);   
    4.            $n = count($strResult[1]);  
    5.          echo $strResult[1][0]; 
    6.          ?>” />  

    第三步需要注意,这段代码的意思是提取文章第一个图片用来做为缩略图,因此:必须保证你的文章第一张图片是正常的;别弄一些很小的图片,用户体验还是要有的;

    • 头像 玲笼府 2

      @付杰 我按照你说的,这样做了,真的可以实现百度站内搜索提交数据化结构!