Apache上WordPress免插件生成適應360站長平臺sitemap.xml的php代碼
編輯:狂族晨曦 來源:WordPress技巧 日期:2016-04-23 閱讀: 4,983 次 7 條評論 » 百度已收錄
先森使用了WordPress的DX-Seo插件,該插件已經能自動生成sitemap.xml文件了,但是先森為什么還要折騰有張戈博客提供的代碼版呢?因為DX-Seo生成的sitemap.xml文件360不能識別,而百度則識別正常。
先來看看先森用了張哥代碼版的效果,我設置的代碼版是sitemap-360.xml文件:

360站長平臺 Sitemap提交
DX-Seo生成的sitemap.xml文件在360中鏈接數量一直顯示為0.而用了張哥的代碼版生成的則非常給力。
下面就為大家介紹這個WordPress技巧。既然是代碼版,首先你得確定你有顆愿意折騰的心。
PHP代碼部分
張戈提供的代碼版sitemap.xml文件可以同時生成首頁、文章、單頁面、分類和標簽,這點比網上其他代碼要完善的多。
<?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 張戈博客(http://zhangge.net)-->
<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
/* 文章頁面 */
$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,傳到網站根目錄。一定要記住,是網站根目錄。
眼尖的同學估計已經發現,代碼結尾處有一個</urlset>的關閉標簽,這并不是多寫了哦,千萬不要刪除。
Apache偽靜態
如果要看Nginx的偽靜態代碼可以去下面的原文鏈接張戈博客那里去看,先森本文著重講下Apache方面的偽靜態。
張哥提供的Apache偽靜態代碼是在.htaccess中添加下面的代碼:
RewriteRule ^(sitemap)\.xml$ $1.php
先森實際操作后發現,可能還需要在前面加上一句,也就是在.htaccess中添加下面的代碼:
RewriteEngine on RewriteRule ^(sitemap)\.xml$ $1.php
由于.htaccess是比較重要的文件,在修改前請務必備份。
做好偽靜態規則后,就可以直接訪問sitemap.xml看看效果了,比如 //www.cnidcc.cn/sitemap-360.xml
總結
這篇WordPress技巧一定要有愿意折騰的心,實際操作中可能會出現很多意外的問題。下面總結一下需要注意的地方:
①php文件要放在網站根目錄下;
②注意不要誤刪除結尾的</urlset>標簽;
③php代碼可以根據實際需求增減內容,如刪除標簽部分的php代碼;
④修改.htaccess前注意備份;
⑤php文件設置的什么文件名,.htaccess文件中寫規則時則做相應的修改。如新建的是sitemap-360.php,那么.htaccess規則中的(sitemap)需改成(sitemap-360)。
本文鏈接地址:http://www.cnidcc.cn/aswpmcjscsy360zcptspdm.html , 轉載請保留本說明!

川公網安備 51011202000104號
厲害!
我還在用插件,沒想到可以自動生成。
@紫杉倒影: 我現在是插件和代碼版的同時用,主要是插件的sitemap站點地圖只是附帶功能。
我用的張哥的!!
我用的百度sitemap插件,貌似360也能識別。
你的sitemap-360.xml,你都不看看!里面顯示“generated-on=2016-05-26 18:38:23 Diy By 張戈博客(http://zhangge.net)”………
@龍笑天: 沒事啊,故意留的,因為用的是張戈的代碼的嘛,一般我都會留的