站點地圖(sitemap.xml)的作用,相信站長們都有所了解,這里織夢模板小編就不多說了。而免插件生成sitemap.xml,網絡上也早就有了純代碼生成的方法。
一直以來,都是用DX-SEO這個很好用的中文SEO插件生成的sitemap。今天整理電腦文件時,看到了以前收藏的生成sitemap.xml的php腳本,就隨手打開看了看,發現這個代碼只能生成主頁和文章頁的sitemap。果斷百度了一下,發現網上分享的都大同小異,只有首頁和文章頁。感覺有點缺憾,反正今天也是閑著,就動手改造了一番,讓這個代碼更加完善,可以同時生成首頁、文章、單頁面、分類和標簽的sitemap!
一、PHP代碼
<?phprequire('./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/">'?> <url> <loc><?php echo get_home_url(); ?></loc> <lastmod><?php $ltime = get_lastpostmodified(GMT);$ltime = gmdate('Y-m-dTH: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>
將以上代碼保存為sitemap.php,傳到網站根目錄,手動訪問查看效果。
二、偽靜態
①、Nginx
編輯已存在的Nginx偽靜態規則,新增如下規則后(平滑)重啟nginx即可:
rewrite ^/sitemap.xml$/sitemap.php last;
②、Apache
編輯網站根目錄的 .htaccess ,加入如下規則:
RewriteRule ^(sitemap).xml$ $1.php
做好偽靜態規則后,就可以直接訪問sitemap.xml看看效果了。
三、純靜態
看到很多朋友已經在問這個sitemap如何靜態化,加快打開速度。畢竟每次重新生成絕對是一個耗能大戶,而且還有可能被有心之人拿來作為攻擊入口!實現方法有多種,比如在Nginx的fastcgi緩存中取消xml文件的緩存屏蔽,或者使用博客最早使用的php生成靜態文件等。
在這里,我就分享一個自己一直在用的最簡單的實現方法:Linux定時任務+wget定時生成sitemap.xml
具體實現:將sitemap.php放到某個不為人知的目錄,然后定時使用wget去請求這個文件,并將數據保存為sitemap.xml存放到網站根目錄就可以了!比如:
#每天在網站根目錄生成一個sitemap.xml diypath為sitemap.php的實際位置0 1 * * * wget -O/home/wwwroot/www.yudouyudou.com/sitemap.xml https://www.yudouyudou.com/diypath/sitemap.php >/dev/null 2>&1
如果是啟用了https的站點,需要加入 --no-check-certificate 的選項,即:
#每天在網站根目錄生成一個sitemap.xml diypath為sitemap.php的實際位置(針對https網站)0 1 * * * wget -O/home/wwwroot/www.yudouyudou.com/sitemap.xml --no-check-certificate https://zhang.ge/diypath/sitemap.php >/dev/null 2>&1
Ps:使用這個方法,注意sitemap.php里面的 require('./wp-blog-header.php'); 要改成 require('../wp-blog-header.php'); 也就是注意相對位置!
如果實在搞不清楚什么是相對路徑,那么就用簡單粗暴的方法:將網站根目錄的sitemap.php重命名為一個只有自己知道的php文件,比如xml.php,然后如下添加任務:
#每天在網站根目錄生成一個sitemap.xml(xml.php為自己重命名的php文件名稱)0 1 * * * wget -O/home/wwwroot/www.yudouyudou.com/sitemap.xml https://www.yudouyudou.com/xml.php >/dev/null 2>&1
這樣一來,就解決了sitemap.xml是動態數據問題了!
四、文章最后
①、確認無誤之后,已開通sitemap權限的就可以前往百度站長平臺提交了,沒開通權限的可以發送申請郵件到百度站長平臺管理員郵箱申請,并且將sitemap.xml使用a標簽鏈接在網站底部即可。
②、代碼使用很簡單,可以根據需要增減內容,比如覺得標簽不應該出現在sitemap里面的,可以將標簽部分的php代碼刪除即可,但一定要注意不要誤刪除結尾的</urlset>標簽。
以上就是WordPress免插件生成完整站點地圖(sitemap.xml)的php代碼及實現方法的全部內容,希望對大家的學習和解決疑問有所幫助,也希望大家多多支持武林網。新聞熱點
疑難解答
圖片精選