WordPress制作一款属于自己的SiteMap插件,本站正在使用

很多人都在寻找WordPress中好用的SiteMap生成工具,但是网络鱼龙混杂,很难找到真正好用的插件,于是博主就来教大家如何自己制作一款属于自己的SiteMap生成插件。

本站案例

本站SiteMap的XML格式:http://www.svlik.com/sitemap.xml

本站SiteMap的HTML格式:http://www.svlik.com/sitemap.html

本站MIPSiteMap的XML格式:http://www.svlik.com/mip_sitemap.xml

准备工作

首先创建一个文件夹名为Svlik-SiteMap,然后在文件夹内创建3个文件,名字分别为sitemap.htmlSvlik-SiteMap.phpSvlik-SiteMap-Function.php即可。

写入代码

将以下代码填入对应的文件中即可。

sitemap.html代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>%blog_title% - %blog_name%</title>
<meta name="keywords" content="%blog_keywords%" />
<meta name="author" content="%Fanly_author%" />
<meta name="copyright" content="%Fanly_copyright%" />
<style type="text/css">
body {font-family:Verdana;font-size: 12px;margin:0;color:#000;background:#fff;}
a{color:#333;text-decoration:none;}
h1{text-align:center;margin-top:20px}
li{margin-top:8px;}
#nav, #content{padding: 8px; border: 1px solid #EEEEEE; clear: both; width: 95%; margin: auto; margin-top: 10px;}
#footer{text-align:center;}
</style>
</head>
<body>
<h1>%blog_name% SiteMap</h1>
<div id="nav"><a href="%blog_home%"><strong>%blog_name%</strong></a>  &raquo; <a href="%sitemap_url%">%blog_title%</a></div>
<div id="content">
<h2>%RecentPost%</h2>
<ul>%contents%</ul>
%Fanly_contents%
</div>

<div id="nav">%footnote%: <a href="%blog_home%">%blog_name%</a></div>

<div id="footer">
<p><b><a href="%blog_home%/sitemap.xml" target="_blank">XML SiteMap</a></b> Latest Update: %updated_time%</p>
<p>&copy; <a href="%blog_home%" target="_blank" title="%blog_name%">%blog_name%</a></p>
</div>
</body>
</html>

Svlik-SiteMap.php代码

<?php
/*
Plugin Name: Svlik SiteMap
Plugin URI: http://www.svlik.com/
Description: WordPress XML地图插件,MIP版。
Author: Svlik
Version: 1.1
Author URI: http://www.svlik.com/
*/

//define the field name of database
define('SITEMAP_OPTION','Svlik_SiteMap');

//load
require_once("Svlik-SiteMap-Function.php");

//add a Menu,like "Sitemap"
add_action('admin_menu','Svlik_SiteMap');
function Svlik_SiteMap() {
   //Add a page to the options section of the website
   if (current_user_can('manage_options')) 				
		add_submenu_page('options-general.php','Svlik SiteMap', 'Svlik SiteMap', 'manage_options', 'Svlik_SiteMap', 'fanly_sitemap_menu', '');
}
//add plugin link
add_filter( 'plugin_action_links', 'Svlik_SiteMap_Add_Link', 10, 5 );
function Svlik_SiteMap_Add_Link( $actions, $plugin_file ) {
	static $plugin;
	if (!isset($plugin))
		$plugin = plugin_basename(__FILE__);
	if ($plugin == $plugin_file) {
			$settings = array('settings' => '<a href="'.('options-general.php?page=Svlik_SiteMap').'">' . __('Settings') . '</a>');
			$site_link = array('support' => '<a href="http://zhangzifan.com" target="_blank">Svlik</a>');
			$actions = array_merge($settings, $actions);
			$actions = array_merge($site_link, $actions);
	}
	return $actions;
}
//remove plugin 
add_filter( 'plugin_action_links', 'Svlik_SiteMap_remove_plugin_link', 10, 4 );
function Svlik_SiteMap_remove_plugin_link( $actions, $plugin_file, $plugin_data, $context ){
	if(isset($actions['edit'])){
		switch($plugin_file){
			case 'Svlik-SiteMap/Svlik-SiteMap.php':unset( $actions['edit'] );
			break;
		}
	}
	return $actions;
}

//custom message
function sitemap_topbarmessage($msg) {
	 echo '<div class="updated fade" id="message"><p>' . $msg . '</p></div>';
}
//get options
function get_fanly_sitemap(){
	$fanly_sitemap = array();
	$get_fanly_sitemap = get_option(SITEMAP_OPTION);
	if( $get_fanly_sitemap ){
		list( $fanly_sitemap['MIP_XML_Sitemap'],$fanly_sitemap['MIP_Site'],$fanly_sitemap['XML_Sitemap'], $fanly_sitemap['Html_Sitemap'], $fanly_sitemap['sitemap_when_post'], $fanly_sitemap['post_limit_1000'], $fanly_sitemap['post'], $fanly_sitemap['page'], $fanly_sitemap['cat'], $fanly_sitemap['tag'] ) = explode("|",$get_fanly_sitemap);
	}else{
		if( !$fanly_sitemap['XML_Sitemap'] ){ $fanly_sitemap['XML_Sitemap'] = 1; }
		if( !$fanly_sitemap['sitemap_when_post'] ){ $fanly_sitemap['sitemap_when_post'] = 1; }
		if( !$fanly_sitemap['post_limit_1000'] ){ $fanly_sitemap['post_limit_1000'] = 1; }
	}
	return $fanly_sitemap;
}

//sitemap page
function fanly_sitemap_form() {
	$fanly_sitemap = get_fanly_sitemap();
	?>
    <div class="wrap">
		<div class="postbox-container" style="width:75%;">
		<div class="metabox-holder">
		<div class="meta-box-sortables">	
						
		<div class="tool-box">
			<a name="sitemap_options"></a><form name="sitemap_options" method="post" action="">
			<input type="hidden" name="action" value="build_options" />
			<table>
				<tr><td><h3>基本配置</h3></td></tr>
				<tr><td>生成MIP XML</td><td>
<?php
if(class_exists('SvlikDomainTheme')) {
	$SvlikDomainTheme = unserialize(get_option("SvlikDomainTheme_options"));
	echo '<select name="MIP_XML_Sitemap" id="Site">';
	foreach($SvlikDomainTheme as $domain){
		if($fanly_sitemap['MIP_XML_Sitemap'] == $domain['url']){$sl = ' selected';}else{$sl='';}
		echo '<option value="'.$domain['url'].'"'.$sl.'>'.$domain['url'].'</option>';
	}
	if($fanly_sitemap['MIP_XML_Sitemap'] == $fanly_sitemap['MIP_Site']){$custom = ' selected';}else{$custom='';}
	echo '<option value="custom"'.$custom.'>自定义MIP Site</option>';
	if($fanly_sitemap['MIP_XML_Sitemap'] == '0'){$sl = ' selected';}else{$sl='';}
	echo '<option value="0"'.$sl.'>不生成</option>';
	echo '</select>';
}else{
	echo '<select name="MIP_XML_Sitemap" id="Site">';
	if($fanly_sitemap['MIP_XML_Sitemap'] == '0'){$sl = ' selected';}else{$sl='';}
	echo '<option value="0"'.$sl.'>不生成</option>';
	if($fanly_sitemap['MIP_XML_Sitemap'] == $fanly_sitemap['MIP_Site']){$custom = ' selected';}else{$custom='';}
	echo '<option value="custom"'.$custom.'>自定义MIP Site</option>';
	echo '<option value="0">更多域名需要SvlikDomainTheme插件支持</option>';
	echo '</select>';
}
?>
                </td></tr>
				<tr id="CustomSite"><td>自定义 MIP Site</td><td><input type="text" name="MIP_Site" value="<?php echo $fanly_sitemap['MIP_Site']?>" /></td></tr>
				<tr><td>生成 XML 地图</td><td><input type="checkbox" name="XML_Sitemap" value="1" <?php if( $fanly_sitemap['XML_Sitemap'] ) { echo 'checked="checked"'; } ?> /></td></tr>
				<tr><td>生成 Html 地图</td><td><input type="checkbox" name="Html_Sitemap" value="1" <?php if( $fanly_sitemap['Html_Sitemap'] ) { echo 'checked="checked"'; } ?> /></td><td><a title="静态HTML网站地图">[?]</a><td></tr>
				<tr><td>发布文章自动更新</td><td><input type="checkbox" name="sitemap_when_post" value="1" <?php if( $fanly_sitemap['sitemap_when_post'] ) { echo 'checked="checked"'; } ?> /></td></tr>
				<tr><td>只生成最近的文章(1000以内)</td><td><input type="checkbox" name="post_limit_1000" value="1" <?php if( $fanly_sitemap['post_limit_1000'] ) { echo 'checked="checked"'; } ?> /></td><td><a title="只需将最近一个更新周期内新增的和变化了的文章包含在XML页面上,过多的数量只会增加服务器的负担。">[?]</a><td></tr>
				<tr><td>包含链接</td><td>
                	<label style="padding-right:10px;"><input type="checkbox" name="post" value="1" checked readonly />文章</label>
                	<label style="padding-right:10px;"><input type="checkbox" name="page" value="1" <?php if( $fanly_sitemap['page'] ) { echo 'checked="checked"'; } ?> />页面</label>
                	<label style="padding-right:10px;"><input type="checkbox" name="cat" value="1" <?php if( $fanly_sitemap['cat'] ) { echo 'checked="checked"'; } ?> />分类</label>
                	<label style="padding-right:10px;"><input type="checkbox" name="tag" value="1" <?php if( $fanly_sitemap['tag'] ) { echo 'checked="checked"'; } ?> />标签</label>
                </td></tr>
			</table>
			<p class="submit"><input type="submit" class="button-primary" /></p>
			</form>
<script type="text/javascript">
	jQuery(function(){
<?php if($fanly_sitemap['MIP_XML_Sitemap'] != $fanly_sitemap['MIP_Site']){?>
		jQuery("#CustomSite").hide();
<?php }?>
		jQuery("select#Site").change(function(){
			var selected = jQuery("select#Site").val();
			if(selected == "custom"){
				jQuery("#CustomSite").show();
			}else{
				jQuery("#CustomSite").hide();
			}
		});
	});
</script> 
		</div>


		<div class="tool-box">
		<h3 class="title">生成XML文件</h3>
				<form name="sitemap_build" method="post" action="">
				<input type="hidden" name="action" value="build_xml" />
				<p class="submit"><input type="submit" class="button-primary" value="更新地图" /></p>
				</form>
		</div>


			<?php
			//show the XML file if exist
			fanly_xml_file_exist();
			?>
		</div>
		</div>
		</div>
	</div>
	<?php
}


//sitemap page
function fanly_sitemap_menu(){
      //Perform any action
		if(isset($_POST["action"])) {
			if ($_POST["action"]=='build_options') {update_fanly_sitemap(); }
		    if ($_POST["action"]=='build_xml') { fanly_sitemap_build();}
		}
		
		//Definition
		echo '<h2>Svlik SiteMap</h2>';

		//Introduction 
		echo '<p>一个支持WordPress生成XML地图、HTML地图以及支持生成MIP XML地图文件。</p>';
		
		//show the option Form 
		fanly_sitemap_form();

		//Show the plugins Author
		Svlik_sidebar();
	
}

//update the options
function update_fanly_sitemap() {
	if ($_POST['action']=='build_options'){
		$MIP_XML_Sitemap = $_POST['MIP_XML_Sitemap'];
		if($MIP_XML_Sitemap == 'custom'){
			$MIPSite = $_POST['MIP_Site'];
			if(strstr($MIPSite,"//")){ 
				$MIPSite = strtok(str_replace("//","",strstr($MIPSite,"//")), '/');
			}else{$MIPSite = strtok($MIPSite, '/');}
			$MIP_XML_Sitemap = $MIPSite;
			$MIP_Site = $MIPSite;
		}else{$MIP_XML_Sitemap = $_POST['MIP_XML_Sitemap'];}
		if(!$MIP_XML_Sitemap){ $MIP_XML_Sitemap = 0; }

		if(!$MIP_Site){ $MIP_Site = ''; }
		
		$XML_Sitemap = $_POST['XML_Sitemap'];
		if(!$XML_Sitemap){ $XML_Sitemap = 0; }
		
		$Html_Sitemap = $_POST['Html_Sitemap'];
		if(!$Html_Sitemap){ $Html_Sitemap = 0; }
		
		$sitemap_when_post = $_POST['sitemap_when_post'];
		if(!$sitemap_when_post){ $sitemap_when_post = 0; }
		
		$post_limit_1000 = $_POST['post_limit_1000'];
		if(!$post_limit_1000){ $post_limit_1000 = 0; }
		
		$fanly_post = $_POST['post'];
		if(!$fanly_post){ $fanly_post = 0; }
		$fanly_page = $_POST['page'];
		if(!$fanly_page){ $fanly_post = 0; }
		$fanly_cat = $_POST['cat'];
		if(!$fanly_cat){ $fanly_cat = 0; }
		$fanly_tag = $_POST['tag'];
		if(!$fanly_tag){ $fanly_tag = 0; }
		
		$sitemap_options = implode('|',array($MIP_XML_Sitemap,$MIP_Site,$XML_Sitemap, $Html_Sitemap, $sitemap_when_post, $post_limit_1000, $fanly_post, $fanly_page, $fanly_cat, $fanly_tag));
		update_option(SITEMAP_OPTION,$sitemap_options); 
        sitemap_topbarmessage('更新配置成功');
		fanly_sitemap_build();
	}
}


//build the XML file, sitemap.xml
add_action('do_sitemap_by_post','fanly_sitemap_build',2,0); 
function fanly_sitemap_build() {
    global $wpdb, $post;
	$fanly_sitemap = get_fanly_sitemap();
	if($fanly_sitemap['post_limit_1000']){ $Svlik_limit = '1000'; } else { $Svlik_limit = '10000'; }

    ## $Svlik_contents , $Svlik_limit = '1000'
	$sql_mini = "select ID,post_modified_gmt,post_date_gmt,post_type FROM $wpdb->posts
	        WHERE post_password = ''
			AND (post_type != 'revision' AND post_type != 'attachment' AND post_type != 'nav_menu_item')
			AND post_status = 'publish'
			ORDER BY post_modified_gmt DESC
			LIMIT 0,$Svlik_limit
	       ";
	$recentpost = $wpdb->get_results($sql_mini);
	if($recentpost){
		foreach ($recentpost as $post){
			if( $post->post_type == 'page' ){
				if(!$fanly_sitemap['page']){ continue; } //跳过
				$loc = get_page_link($post->ID);
				$loc = Svlik_EscapeXML($loc);
				if(!$loc){ continue; }
				if($post->post_modified_gmt == '0000-00-00 00:00:00'){ $post_date_gmt = $post->post_date_gmt; } else { $post_date_gmt = $post->post_modified_gmt; } 
				$lastmod = date("Y-m-d\TH:i:s+00:00",Svlik_GetTimestampFromMySql($post_date_gmt));
				$changefreq = 'weekly';
				$priority = '0.3';
				$xml_content_page .= "<url>";
				$xml_content_page .= "<loc>$loc</loc>";
				$xml_content_page .= "<lastmod>$lastmod</lastmod>";
				$xml_content_page .= "<changefreq>$changefreq</changefreq>";
				$xml_content_page .= "<priority>$priority</priority>";
				$xml_content_page .= "</url>";
			}
		}
		
		$args = array(
			'showposts' => $Svlik_limit,//显示文章数量
			'ignore_sticky_posts' => 1, //忽略sticky_posts,即不置顶(不将置顶文章提至最前),但是输出置顶文章
		);
		$query = new WP_Query( $args );
		while ($query->have_posts()) : $query->the_post();
			$loc = get_permalink();
			$loc = Svlik_EscapeXML($loc);
			if(!$loc){ continue; }
			$lastmod = get_the_modified_time('Y-m-d\TH:i:s+00:00');
			$changefreq = 'monthly';
			$priority = '0.6';
			$xml_content_post .= "<url>";
			$xml_content_post .= "<loc>$loc</loc>";
			$xml_content_post .= "<lastmod>$lastmod</lastmod>";
			$xml_content_post .= "<changefreq>$changefreq</changefreq>";
			$xml_content_post .= "<priority>$priority</priority>";
			$xml_content_post .= "</url>";
		endwhile;

		## get_category_link
		$category_ids = get_all_category_ids();
		foreach($category_ids as $cat_id) {
			if(!$fanly_sitemap['cat']){ continue; } //跳过
			$loc = get_category_link($cat_id);
			$loc = Svlik_EscapeXML($loc);
			if(!$loc){ continue; }
			$lastmod = date("Y-m-d\TH:i:s+00:00",current_time('timestamp', '1'));
			$changefreq = 'Weekly';
			$priority = '0.3';
			$xml_content_cat .= "<url>";
			$xml_content_cat .= "<loc>$loc</loc>";
			$xml_content_cat .= "<lastmod>$lastmod</lastmod>";
			$xml_content_cat .= "<changefreq>$changefreq</changefreq>";
			$xml_content_cat .= "<priority>$priority</priority>";
			$xml_content_cat .= "</url>";
		}
		## get_tags
		$all_the_tags = get_tags();
		if($all_the_tags){
			foreach($all_the_tags as $this_tag) {
				if(!$fanly_sitemap['tag']){ continue; } //跳过
				$tag_id = $this_tag->term_id;
				$loc = get_tag_link($tag_id);
				$loc = Svlik_EscapeXML($loc);
				if(!$loc){ continue; }
				$lastmod = date("Y-m-d\TH:i:s+00:00",current_time('timestamp', '1'));
				$changefreq = 'Weekly';
				$priority = '0.3';
				$xml_content_tag .= "<url>";
				$xml_content_tag .= "<loc>$loc</loc>";
				$xml_content_tag .= "<lastmod>$lastmod</lastmod>";
				$xml_content_tag .= "<changefreq>$changefreq</changefreq>";
				$xml_content_tag .= "<priority>$priority</priority>";
				$xml_content_tag .= "</url>";
			}
		}

		##
		$xml_contents = $xml_content_post.$xml_content_page.$xml_content_cat.$xml_content_tag;
	}


	## XML
	if($fanly_sitemap['XML_Sitemap']){
		fanly_sitemap_build_xml($xml_contents);
	}else{//删除
		Svlik_SiteMap_DEL('sitemap.xml');
	}
	## MIP XML
	if($fanly_sitemap['MIP_XML_Sitemap']){
		build_mip_sitemap_xml($xml_contents);
	}else{//删除
		Svlik_SiteMap_DEL('mip_sitemap.xml');
	}
	## Html
	if($fanly_sitemap['Html_Sitemap']){
		fanly_sitemap_build_html();
	}else{//删除
		Svlik_SiteMap_DEL('sitemap.html');
	}

	if(function_exists('wp_clear_scheduled_hook')) { wp_clear_scheduled_hook('do_sitemap_by_post'); }
    //sitemap_is_auto_daily(); 
}

function Svlik_SiteMap_DEL($file){
	$file = Svlik_GetHomePath().$file;//基于站点根目录
	if(is_file($file)){
		if(unlink($file)){
			sitemap_topbarmessage("文件{$file}删除完毕!");
		}else{
			//echo "文件{$file}删除失败...!尝试修改文件权限删除...";
			if(chmod($file,0777)){
				unlink($file);
				sitemap_topbarmessage("文件{$file}权限修改后删除完毕...");
			}else{
				sitemap_topbarmessage("文件{$file}无法自动删除,请手动通过FTP删除!");
			}
		}
	}
}
//MIP XML
function build_mip_sitemap_xml($xml_contents){
	$Svlik_blog_url = home_url();
	$blogtime = current_time('timestamp', '1');
	$Svlik_blog_time = date("Y-m-d\TH:i:s+00:00",$blogtime);

	$xml_begin = '<?xml version="1.0" encoding="UTF-8"?>'.fanly_xml_annotate().'<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="http://www.sitemaps.org/schemas/sitemap/0.9">';
	$xml_home = "<url><loc>$Svlik_blog_url</loc><lastmod>$Svlik_blog_time</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url>";
	$xml_end = '</urlset>';
	if($xml_contents){
		$fanly_sitemap = get_fanly_sitemap();
		$xml = $xml_begin.$xml_home.$xml_contents.$xml_end;
		$xml = str_replace(str_replace("//","",strstr(home_url(),"//")),$fanly_sitemap['MIP_XML_Sitemap'],$xml);

		//save XML file as sitemap.xml
		$Svlik_GetHomePath = Svlik_GetHomePath();
		$filename = $Svlik_GetHomePath.'mip_sitemap.xml';
		if( IsFileWritable($Svlik_GetHomePath) || IsFileWritable($filename) ){ 
			file_put_contents("$filename","$xml"); 
			@chmod($filename, 0777);
			//Messages
			sitemap_topbarmessage('更新 MIP XML 文件成功!');
		}else{ 
			//Messages
			sitemap_topbarmessage('文件或目录不可写,请修改根目录权限改为777。');
		}
	}
}

//XML
function fanly_sitemap_build_xml($xml_contents){
	$Svlik_blog_url = home_url();
	$blogtime = current_time('timestamp', '1');
	$Svlik_blog_time = date("Y-m-d\TH:i:s+00:00",$blogtime);

	$xml_begin = '<?xml version="1.0" encoding="UTF-8"?>'.fanly_xml_annotate().'<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="http://www.sitemaps.org/schemas/sitemap/0.9">';
	$xml_home = "<url><loc>$Svlik_blog_url</loc><lastmod>$Svlik_blog_time</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url>";
	$xml_end = '</urlset>';
	if($xml_contents){
		$xml = $xml_begin.$xml_home.$xml_contents.$xml_end;

		//save XML file as sitemap.xml
		$Svlik_GetHomePath = Svlik_GetHomePath();
		$filename = $Svlik_GetHomePath.'sitemap.xml';
		if( IsFileWritable($Svlik_GetHomePath) || IsFileWritable($filename) ){ 
			file_put_contents("$filename","$xml"); 
			@chmod($filename, 0777);
			//Messages
			sitemap_topbarmessage('更新 XML 文件成功!');
		}else{ 
			//Messages
			sitemap_topbarmessage('文件或目录不可写,请修改根目录权限改为777。');
		}
	}
}
function fanly_sitemap_build_html(){
	global $wpdb;
	$fanly_sitemap = get_fanly_sitemap();
	if($fanly_sitemap['post_limit_1000']){ $Svlik_limit = '1000'; } else { $Svlik_limit = '10000'; }

    ##文章
	$html_contents = $html_category_contents = $html_page_contents = $html_tag_contents = '';
	$args = array(
		'showposts' => $Svlik_limit,//显示文章数量
		'ignore_sticky_posts' => 1, //忽略sticky_posts,即不置顶(不将置顶文章提至最前),但是输出置顶文章
	);
	$query = new WP_Query( $args );
	while ($query->have_posts()) : $query->the_post();
	$html_contents .= '<li><a href="'.get_permalink().'" title="'.get_the_title().'" target="_blank">'.get_the_title().'</a></li>';
	endwhile;

	if($fanly_sitemap['cat'])
		$html_category_contents	= '<h2>分类</h2><ul>'.wp_list_categories('echo=0&title_li=').'</ul>';
	if($fanly_sitemap['page'])
		$html_page_contents		= '<h2>页面</h2><ul>'.wp_list_pages('echo=0&title_li=').'</ul>';
	if($fanly_sitemap['tag'])
		$html_tag_contents		= '<h2>标签</h2>'.wp_tag_cloud('echo=0&number=245');
	
	$Svlik_contents = $html_page_contents.$html_category_contents.$html_tag_contents;

	$blog_title = 'SiteMap';
	$blog_name = get_bloginfo('name'); 
	$blog_keywords = 'SiteMap,网站地图'.$blog_name;
	$Svlik_author = $blog_name;
	$Svlik_copyright = 'www.Svlik.com';
	$blog_home = get_bloginfo('url');
	$sitemap_url = get_bloginfo('url').'/sitemap.html';
	$recentpost = '最新文章';
	$footnote = '首页';
	$updated_time = current_time('mysql');

	if($html_contents) { 
		$path_html  = GetPluginPath().'sitemap.html';
		$html = file_get_contents("$path_html");
		
		$html = str_replace("%blog_title%",$blog_title,$html);
		$html = str_replace("%blog_name%",$blog_name,$html);
		$html = str_replace("%blog_home%",$blog_home,$html);
		$html = str_replace("%blog_keywords%",$blog_keywords,$html);
		$html = str_replace("%Svlik_author%",$Svlik_author,$html);
		$html = str_replace("%Svlik_copyright%",$Svlik_copyright,$html);
		$html = str_replace("%sitemap_url%",$sitemap_url,$html);
		$html = str_replace("%footnote%",$footnote,$html);
		$html = str_replace("%RecentPost%",$recentpost,$html);
		$html = str_replace("%updated_time%",$updated_time,$html);
		$html = str_replace("%contents%",$html_contents,$html);
		$html = str_replace("%Svlik_contents%",$Svlik_contents,$html);
		$Svlik_GetHomePath = Svlik_GetHomePath();
		$filename_html = $Svlik_GetHomePath.'sitemap.html';
		if( IsFileWritable($Svlik_GetHomePath) || IsFileWritable($filename_html) ){ 
			file_put_contents("$filename_html","$html");
			@chmod($filename_html, 0777);
			//Messages
			sitemap_topbarmessage('更新HTML地图成功!');
		}
	}
}
	

## Auto
add_action('init','sitemap_is_auto_daily',1001,0);
function sitemap_is_auto_daily() {
	$Svlik_updatePeri = $Svlik_updatePeri*60*60*24;
	wp_schedule_single_event(time()+$Svlik_updatePeri, 'do_this_auto_daily'); 
	add_action('do_this_auto_daily','fanly_sitemap_build',2,0); 
}

add_action('publish_post', 'sitemap_by_post');
function sitemap_by_post($post_ID) {
	$get_fanly_sitemap = get_fanly_sitemap();
	if($get_fanly_sitemap['sitemap_when_post'] == '1'){
		   wp_clear_scheduled_hook('do_sitemap_by_post');
		   wp_schedule_single_event(time()+30, 'do_sitemap_by_post'); 
	}
	return $post_ID;
}

?>

Svlik-SiteMap-Function.php代码

<?php
/*
*@author arnee
*google-sitemap-TearSnow
*/
#region PHP5 compat functions
if (!function_exists('file_get_contents')) {
	/**
	 * Replace file_get_contents()
	 *
	 * @category    PHP
	 * @package     PHP_Compat
	 * @link        http://php.net/function.file_get_contents
	 * @author      Aidan Lister <aidan - php - net>
	 * @version     $Revision: 1.21 $
	 * @internal    resource_context is not supported
	 * @since       PHP 5
	 */
	function file_get_contents($filename, $incpath = false, $resource_context = null) {
		if (false === $fh = fopen($filename, 'rb', $incpath)) {
			user_error('file_get_contents() failed to open stream: No such file or directory', E_USER_WARNING);
			return false;
		}
		
		clearstatcache();
		if ($fsize = @filesize($filename)) {
			$data = fread($fh, $fsize);
		} else {
			$data = '';
			while (!feof($fh)) {
				$data .= fread($fh, 8192);
			}
		}
		
		fclose($fh);
		return $data;
	}
}


if(!function_exists('file_put_contents')) {
	
	if (!defined('FILE_USE_INCLUDE_PATH')) {
		define('FILE_USE_INCLUDE_PATH', 1);
	}
	
	if (!defined('LOCK_EX')) {
		define('LOCK_EX', 2);
	}
	
	if (!defined('FILE_APPEND')) {
		define('FILE_APPEND', 8);
	}
	
	
	/**
	 * Replace file_put_contents()
	 *
	 * @category    PHP
	 * @package     PHP_Compat
	 * @link        http://php.net/function.file_put_contents
	 * @author      Aidan Lister <aidan - php - net>
	 * @version     $Revision: 1.25 $
	 * @internal    resource_context is not supported
	 * @since       PHP 5
	 * @require     PHP 4.0.0 (user_error)
	 */
	function file_put_contents($filename, $content, $flags = null, $resource_context = null) {
		// If $content is an array, convert it to a string
		if (is_array($content)) {
			$content = implode('', $content);
		}
		
		// If we don't have a string, throw an error
		if (!is_scalar($content)) {
			user_error('file_put_contents() The 2nd parameter should be either a string or an array',E_USER_WARNING);
			return false;
		}
		
		// Get the length of data to write
		$length = strlen($content);
		
		// Check what mode we are using
		$mode = ($flags & FILE_APPEND)?'a':'wb';
		
		// Check if we're using the include path
		$use_inc_path = ($flags & FILE_USE_INCLUDE_PATH)?true:false;
		
		// Open the file for writing
		if (($fh = @fopen($filename, $mode, $use_inc_path)) === false) {
			user_error('file_put_contents() failed to open stream: Permission denied',E_USER_WARNING);
			return false;
		}
		
		// Attempt to get an exclusive lock
		$use_lock = ($flags & LOCK_EX) ? true : false ;
		if ($use_lock === true) {
			if (!flock($fh, LOCK_EX)) {
				return false;
			}
		}
		
		// Write to the file
		$bytes = 0;
		if (($bytes = @fwrite($fh, $content)) === false) {
			$errormsg = sprintf('file_put_contents() Failed to write %d bytes to %s',$length,$filename);
			user_error($errormsg, E_USER_WARNING);
			return false;
		}
		
		// Close the handle
		@fclose($fh);
		
		// Check all the data was written
		if ($bytes != $length) {
			$errormsg = sprintf('file_put_contents() Only %d of %d bytes written, possibly out of free disk space.',$bytes,$length);
			user_error($errormsg, E_USER_WARNING);
			return false;
		}
		
		// Return length
		return $bytes;
	}
	
}
#endregion


/*
*@author arnee
*google-sitemap-TearSnow
*/
if (!function_exists('Svlik_GetHomePath')) {
function Svlik_GetHomePath() {
	
	$res="";
	//Check if we are in the admin area -> get_home_path() is avaiable
	if(function_exists("get_home_path")) {
		$res = get_home_path();
	} else {
		//get_home_path() is not available, but we can't include the admin
		//libraries because many plugins check for the "check_admin_referer"
		//function to detect if you are on an admin page. So we have to copy
		//the get_home_path function in our own...
		$home = get_option( 'home' );
		if ( $home != '' && $home != get_option( 'siteurl' ) ) {
			$home_path = parse_url( $home );
			$home_path = $home_path['path'];
			$root = str_replace( $_SERVER["PHP_SELF"], '', $_SERVER["SCRIPT_FILENAME"] );
			$home_path = trailingslashit( $root.$home_path );
		} else {
			$home_path = ABSPATH;
		}

		$res = $home_path;
	}
	return $res;
}
}



/*
*@author arnee
*/
function Svlik_EscapeXML($string) {
	return str_replace ( array ( '&', '"', "'", '<', '>'), array ( '&amp;' , '&quot;', '&apos;' , '&lt;' , '&gt;'), $string);
}


/**
 * Checks if a file is writable and tries to make it if not.
 *
 * @since 3.05b
 * @access private
 * @author  VJTD3 <http://www.VJTD3.com>
 * @return bool true if writable
 */
if (!function_exists('IsFileWritable')) {
function IsFileWritable($filename) {
	clearstatcache();
	//can we write?
	if(!is_writable($filename)) {
		//no we can't.
		if(!@chmod($filename, 0666)) {
			$pathtofilename = dirname($filename);
			//Lets check if parent directory is writable.
			if(!is_writable($pathtofilename)) {
				//it's not writeable too.
				if(!@chmod($pathtoffilename, 0666)) {
					//darn couldn't fix up parrent directory this hosting is foobar.
					//Lets error because of the permissions problems.
					return false;
				}
			}
		}
	}
	//we can write, return 1/true/happy dance.
	return true;
}
}


/*
*
*Un-quotes quoted string\
*/
if (!function_exists('stripslashes_deep')) {
	function stripslashes_deep($value)
	{
		$value = is_array($value) ?
					array_map('stripslashes_deep', $value) :
					stripslashes($value);

		return $value;
	}
}


/**
 * Returns the path to the directory where the plugin file is located
 * @since 3.0b5
 * @access private
 * @author Arne Brachhold
 * @return string The path to the plugin directory
 */
if (!function_exists('GetPluginPath')) {
function GetPluginPath() {
	$path = dirname(__FILE__);
	return trailingslashit(str_replace("\\","/",$path));
}
}


/**
 * Returns the URL to the directory where the plugin file is located
 * @since 3.0b5
 * @access private
 * @author Arne Brachhold
 * @return string The URL to the plugin directory
 */
if (!function_exists('GetPluginUrl')) {
function GetPluginUrl() {
	
	//Try to use WP API if possible, introduced in WP 2.6
	if (function_exists('plugins_url')) return trailingslashit(plugins_url(basename(dirname(__FILE__))));
	
	//Try to find manually... can't work if wp-content was renamed or is redirected
	$path = dirname(__FILE__);
	$path = str_replace("\\","/",$path);
	$path = trailingslashit(get_bloginfo('wpurl')) . trailingslashit(substr($path,strpos($path,"wp-content/")));
	return $path;
}
}


/**
*load_plugin_textdomain('sitemap');
*@author Arne Brachhold
*/

function Svlik_sidebar() {?>
<style type="text/css">
a.Svlik_button {
	padding:4px;
	display:block;
	padding-left:25px;
	background-repeat:no-repeat;
	background-position:5px 50%;
	text-decoration:none;
	border:none;
}
</style>
<?php
}

function fanly_xml_file_exist() {
	$Svlik_blog_url = home_url();
	$filePath = Svlik_GetHomePath();
	$filename = $filePath.'sitemap.xml';
	$filemipname = $filePath.'mip_sitemap.xml';
	echo '<div class="tool-box">';
	echo '<h3 class="title">XML 文件状态</h3>';
    if(file_exists($filemipname)){
		$fanly_sitemap = get_fanly_sitemap();
		$mipurl =str_replace(strtok(str_replace("//","",strstr($Svlik_blog_url,"//")), '/'),$fanly_sitemap['MIP_XML_Sitemap'],$Svlik_blog_url);
		date_default_timezone_set ('Asia/Shanghai');
		$filemtime=date("Y-m-d H:i:s",filemtime("$filemipname")); 
		echo '<p>检查 MIP XML 文件:<a href="'.$mipurl.'/mip_sitemap.xml'.'" target="_blank">'.$mipurl.'/mip_sitemap.xml'.'</a>('.$filemtime.')</p>';
	}
	if(file_exists($filename)){
		date_default_timezone_set ('Asia/Shanghai');
		$filemtime=date("Y-m-d H:i:s",filemtime("$filename")); 
		echo '<p>检查 XML 文件:<a href="'.$Svlik_blog_url.'/sitemap.xml'.'" target="_blank">'.$Svlik_blog_url.'/sitemap.xml'.'</a>('.$filemtime.')</p>';
		echo '<p>添加Sitemap到robots.txt:</p>';
		echo '<pre><b>Sitemap: '.$Svlik_blog_url.'/sitemap.xml</b></pre>';
	}
	$sitemap_html = Svlik_GetHomePath().'sitemap.html'; if(file_exists($sitemap_html)) { echo '<p>检查 Html 静态页面: '; echo '<a href="'.$Svlik_blog_url.'/sitemap.html'.'" target="_blank">'.$Svlik_blog_url.'/sitemap.html'.'</a></p>'; echo '<p>在首页添加此html的链接,方便搜索引擎抓取。'; print '</p>'; }
	
	if(!file_exists($filemipname) && !file_exists($filename) && !file_exists(Svlik_GetHomePath().'sitemap.html')){
		echo '<p>你还未设置或者生成任何地图文件!</p>';
	}
	echo '</div>';
}
function fanly_xml_annotate() {
	$blogtime = current_time('mysql'); 
	$xml_author_annotate = '<!-- generated-on="'.$blogtime.'" By Svlik(www.svlik.com) -->';
    return $xml_author_annotate;
}

function Svlik_GetTimestampFromMySql($mysqlDateTime) {
	list($date, $hours) = explode(' ', $mysqlDateTime);
	list($year,$month,$day) = explode('-',$date);
	list($hour,$min,$sec) = explode(':',$hours);
	return mktime(intval($hour), intval($min), intval($sec), intval($month), intval($day), intval($year));
}
?>

将以上代码按照文件名对应输入之后将会是以下图片效果,然后将整个文件上传至/wp-content/plugins/文件夹内,然后到后台启用插件即可正常使用,再把根目录设置可写即可正常生成了。

如果你不会自己动手,没关系,伸手党可以在底部直接下载即可。

Svlik-SiteMap.zip (下载222)
声明:本文为原创,作者为 Svlik,转载时请保留本声明及附带文章链接:http://www.svlik.com/1171.html