使用 WordPress 以前需要使用插件( 如: google sitemap generator )来生成 XML 站点地图,现在可以不用了,WordPress 已经自带 XML 站点地图了,默认地址为:域名/wp-sitemap.xml 。

如果不想使用 WordPress 自带的 XML 站点地图,可以把以下代码添加到当前主题的 functions.php 中将其禁用。

add_filter( 'wp_sitemaps_enabled', '__return_false' );

如果想用,要把 XML 站点地图生成插件禁用或者删除( 否则访问 wp-sitemap.xml 会 404 ),而且可以根据个人需求选择以下部分代码添加到当前主题的 functions.php 中,对默认的 XML 站点地图进行一些设置。

网站地图增加 changefreq、priority 和 lastmod 标签信息

add_filter( 'wp_sitemaps_posts_entry', function( $entry, $post ) {
	$entry['lastmod'] = $post->post_modified_gmt;
	$entry['changefreq'] = 'Daily';
	$entry['priority'] = '0.6';
	return $entry;
}, 10, 2 );

排除 page 页面

add_filter(
    'wp_sitemaps_post_types',
    function( $post_types ) {
        unset( $post_types['page'] );
        return $post_types;
    }
);

排除 category 页面

add_filter(
	'wp_sitemaps_taxonomies',
	function( $taxonomies ) {
		unset( $taxonomies['category'] );
		return $taxonomies;
	}
);

排除 tag 页面

add_filter(
    'wp_sitemaps_taxonomies',
    function( $taxonomies ) {
        unset( $taxonomies['post_tag'] );
        return $taxonomies;
    }
);

排除某个分类的文章

add_filter(
	'wp_sitemaps_taxonomies_query_args',
	function( $args ) {
		$args['exclude'] = isset( $args['exclude'] ) ? $args['exclude'] : array();
		$args['exclude'][] = 123; // 排除的分类 ID
		return $args;
	}
);

排除部分文章

add_filter(
	'wp_sitemaps_posts_query_args',
	function( $args, $post_type ) {
		if ( 'post' !== $post_type ) {
			return $args;
		}
 
	$args['post__not_in'] = isset( $args['post__not_in'] ) ? $args['post__not_in'] : array();
		$args['post__not_in'][] = 123; // 排除的文章 ID
		return $args;
	}, 10, 2 
);

排除某个用户链接

add_filter(
	'wp_sitemaps_users_query_args',
	function( $args ) {
		$args['exclude'] = isset( $args['exclude'] ) ? $args['exclude'] : array();
		$args['exclude'][] = 1; // 排除的用户 ID
		return $args;
	}
);