WordPress无需插件用代码自动生成sitemap文件

今天在百度站内搜索里看到今日杂记的sitemap包含链接数只有298,明显不对啊,目前文章一共有324篇,肯定是生成sitemap的插件出了问题。马上关闭所有插件挨个测试,发现问题不是出在插件冲突,然后换个空间测试,果然是万网X3主机的问题,于是马上想到直接用代码生成sitemap文件,还可以省去安装一个插件。(之前就想让WordPress无插件化,但是懒得去弄这些东西,现在出现问题,没有办法,必须去弄,所以人都是逼出来的。)

用百度和Google都搜索了下,网上目前的方法不够方便,基本上都是抄袭的一个人的原创,创建一个sitemap.php的文件,把代码放入其中,然后再做URL转发。我喜欢把要用的代码放到主题的function.php文件里,换主题或者升级WordPress的时候不用再次修改。于是用Google英文搜索,关键词“WordPress without plugin sitemap”,果然找到和我有一样喜好的外国网友。找到的代码有点小问题,生成的sitemap文件在浏览器里无法正常显示,做了下简单的修改,让sitemap在浏览器里显示正常,添加了一句sitemap文件的生成时间,还有百度的移动搜索sitemap,最终得到下面的代码,把以下代码复制粘贴到你WordPress主题的function.php里就行,就这么简单,效果可参考今日杂记的sitemap文件:http://todaym.com/sitemap.xml

/* function to create sitemap.xml file in root directory of site */
add_action("save_post", "eg_create_sitemap");
function eg_create_sitemap() {
if(str_replace('-', '', get_option('gmt_offset'))<10) { $tempo = '-0'.str_replace('-', '', get_option('gmt_offset')); } else { $tempo = get_option('gmt_offset'); }
if(strlen($tempo)==3) { $tempo = $tempo.':00'; }
$postsForSitemap = get_posts(array(
'numberposts' => -1,
'orderby' => 'modified',
'post_type' => array('post','page'),
'order'=> 'DESC'));
$sitemap .= '<?xml version="1.0" encoding="UTF-8"?>';
$sitemap .= "\n".'<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n";
$sitemap .= '<!-- generated-on=' . date( "Y-m-d\TH:i:s", current_time( 'timestamp', 0 ) ) . $tempo . '-->'."\n";
$sitemap .= "\t".'<url>'."\n".
"\t\t".'<loc>'. esc_url( home_url( '/' ) ) .'</loc>'.
"\n\t\t".'<lastmod>' . date( "Y-m-d\TH:i:s", current_time( 'timestamp', 0 ) ) . $tempo . '</lastmod>'.
"\n\t\t".'<changefreq>daily</changefreq>'.
"\n\t\t".'<priority>1.0</priority>'.
"\n\t".'</url>'."\n";
foreach($postsForSitemap as $post) {
setup_postdata($post);
$postdate = explode(" ", $post->post_modified);
$sitemap .= "\t".'<url>'."\n".
"\t\t".'<loc>'. get_permalink($post->ID) .'</loc>'.
"\n\t\t".'<lastmod>'. $postdate[0] . 'T' . $postdate[1] . $tempo . '</lastmod>'.
"\n\t\t".'<changefreq>Weekly</changefreq>'.
"\n\t\t".'<priority>0.5</priority>'.
"\n\t".'</url>'."\n";
}
$sitemap .= '</urlset>';
$fp = fopen(ABSPATH . "sitemap.xml", 'w');
fwrite($fp, $sitemap);
fclose($fp);
}

该方法的原文链接在此:http://wordpress.stackexchange.com/questions/15218/how-to-generate-update-a-xml-sitemap-without-plugins

我猜~这些文章你可能也感兴趣

Nie
Tags

相关文章

*


Top