以往要為 WordPress 提交一個網站地圖給 Google 搜尋,都必須額外安裝一些 sitemap 外掛,或是一些 SEO 外掛也有附帶 sitemap。從版本 5.5 開始,官方新增 sitemap 功能,預設名稱是 wp-sitemap.xml
注意:sitemap需要一個 php 模組 SimpleXML,請檢查一下是否支援。
在官方預設的 Provider 有三種,文章(posts)、分類(taxonomies)和用戶(users)。
基於安全考量,一般先把用戶(users)剔除不加入,所以 $name=’users’。如果不加入文章或分類,就把變數改為 posts 或taxonomies,hook 語法如下:
add_filter( 'wp_sitemaps_add_provider', function( $provider, $name ) {
if ( 'users' === $name ) {
return false;
}
return $provider;
}, 10, 2 );
有時候我們會增加一些 post type 作為特殊用途,而不是做一般文章顯示,但又不想讓它出現在 sitemap,如果用上面的語法 $name=’posts’,會將整個文章通通剔除。這時候可以用下面語法提除單一類型:
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['my_post_type_name'] );
return $post_types;
});
同樣,如果要剔除某個分類,可以用 wp_sitemaps_taxonomies
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['category'] );
return $taxonomies;
});
決定了 Provider 之後,每條相關 index 點進去就能看到該 Provider 的每頁的網址清單,但是目前預設只有顯示「網址」一個欄位,如果要顯示「最後修改」、「變更頻率」、「優先順序」怎麼辦,請看以下語法:
add_filter( 'wp_sitemaps_posts_entry', function( $entry, $post ) {
$entry['lastmod'] = $post->post_modified_gmt;
$entry['changefreq'] = 'weekly';
$entry['priority'] = '0.8';
return $entry;
}, 10, 2 );
如果不要讓受密碼保護的文章出現:
add_filter( 'wp_sitemaps_posts_query_args', function($args){
$args['has_password'] = false;
return $args;
} );
最後如果不想用內建的 sitemap 的話:
add_filter( 'wp_sitemaps_enabled', '__return_false' );