站點(diǎn)地圖(sitemap.xml)的作用,相信站長(zhǎng)們都有所了解,這里織夢(mèng)模板小編就不多說(shuō)了。而免插件生成sitemap.xml,網(wǎng)絡(luò)上也早就有了純代碼生成的方法。

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