WordPress5.5默認地圖(sitemap)使用教程
[重要通告]如您遇疑難雜癥,本站支持知識付費業務,掃右邊二維碼加博主微信,可節省您寶貴時間哦!
WordPress 5.5開始官方內置了站點地圖,那么WordPress 5.5的內置網站地圖怎么使用呢?若不想使用它該怎么操作呢?下面一起來看看官方文檔的解釋。注:如果不需要,建議禁用此功能。
完全禁用所有WP網站地圖
您可以通過在functions.php
文件向主題模板或子主題添加同一行代碼來徹底禁用WP自帶的站點地圖功能:
add_filter('wp_sitemaps_enabled', '__return_false');
在這里所做的只是向過濾器掛鉤wp_sitemaps_enabled
返回的值false
,就可以禁用了。注意:如果您更新WordPress常規設置以阻止搜索引擎將您的網站編入索引,則站點地圖將被自動禁用。因此,在那種情況下,無需使用任何插件或代碼來禁用它。
禁用用戶站點地圖
對于大多數網站來說,排除/禁用整個用戶站點地圖以幫助提高安全性可能是一個好主意。以下是實現該功能的代碼:
// disable users sitemap function shapeSpace_disable_sitemap_users($provider, $name) { return ($name == 'users') ? false : $provider; } add_filter('wp_sitemaps_add_provider', 'shapeSpace_disable_sitemap_users', 10, 2);
此代碼段無需編輯。只需添加到您的WordPress主題functions.php
功能即可。
禁用文章類型站點地圖
默認情況下,WordPress站點地圖包括每種(非空)文章類型的站點地圖;對于典型的WordPress網站,這意味著站點地圖將包含指向以下站點地圖的鏈接:
URL https://example.com/wp-sitemap-posts-post-1.xml https://example.com/wp-sitemap-posts-page-1.xml 以及任何自定義文章類型:
https://example.com/wp-sitemap-posts-movie-1.xml https://example.com/wp-sitemap-posts-book-1.xml
因此,要排除任何“文章”類型的站點地圖,請將以下代碼添加到您的主題(或簡單的插件)中:
// disable post type sitemap function shapeSpace_disable_sitemap_post_types($post_types) { unset($post_types['page']); // 可以修改page為你需要的自定義文章類型 return $post_types; } add_filter('wp_sitemaps_post_types', 'shapeSpace_disable_sitemap_post_types');
如所寫,該代碼禁用了page文章類型。因此,您可以將其更改為您要排除的任何文章類型。只需更換page您的文章類型名稱(如post,movie,book,等)。
禁用分類法站點地圖
默認情況下,WordPress網站地圖包含每個(非空)分類法的網站地圖。對于典型的WordPress網站,這意味著您的站點地圖將包含指向以下站點地圖的鏈接:
URL https://example.com/wp-sitemap-taxonomies-category-1.xml https://example.com/wp-sitemap-taxonomies-post_tag-1.xml
以及任何自定義分類法:
https://example.com/wp-sitemap-taxonomies-color-1.xml https://example.com/wp-sitemap-taxonomies-shape-1.xml
因此,要排除任何“分類”站點地圖,請在主題(或簡單插件)中添加以下代碼:
// disable taxonomy sitemap function shapeSpace_disable_sitemap_taxonomy($taxonomies) { unset($taxonomies['post_tag']); // can be post_tag, category, post_format, or any taxonomy return $taxonomies; } add_filter('wp_sitemaps_taxonomies', 'shapeSpace_disable_sitemap_taxonomy');
如所寫,該代碼禁用了post_tag分類法。因此,您可以將其更改為要排除的任何分類法。只需更換post_tag你的分類的名稱(例如category,post_format,color,book,等)。
從站點地圖中排除特定頁面
要從WordPress網站地圖中排除特定頁面,請應用以下代碼技術:
// disable specific page function shapeSpace_disable_sitemap_specific_page($args, $post_type) { if ('page' !== $post_type) return $args; $args['post__not_in'] = isset($args['post__not_in']) ? $args['post__not_in'] : array(); $args['post__not_in'][] = 2; // exclude page with ID = 2 return $args; } add_filter('wp_sitemaps_posts_query_args', 'shapeSpace_disable_sitemap_specific_page', 10, 2);
注意函數中的第一行,它檢查$post_type是否為page。這告訴函數不要執行任何操作,除非當前的帖子類型是“頁面”。因此,要從其他文章類型中排除文章,請更改page為要定位的任何文章類型的名稱。
函數中的第二行檢查以確保post__not_in已設置變量。然后第三行是動作發生的地方。在編寫代碼時,該代碼排除了ID等于2的頁面。因此,您可以將該ID更改為要從站點地圖中排除的任何頁面ID。
要排除多個頁面,上述技術將是相同的,但是增加了更多的“排除”行:
// disable specific pages function shapeSpace_disable_sitemap_specific_pages($args, $post_type) { if ('page' !== $post_type) return $args; $args['post__not_in'] = isset($args['post__not_in']) ? $args['post__not_in'] : array(); $args['post__not_in'][] = 2; // exclude page with ID = 2 $args['post__not_in'][] = 3; // exclude page with ID = 3 $args['post__not_in'][] = 4; // exclude page with ID = 4 $args['post__not_in'][] = 5; // exclude page with ID = 5 $args['post__not_in'][] = 6; // exclude page with ID = 6 return $args; } add_filter('wp_sitemaps_posts_query_args', 'shapeSpace_disable_sitemap_specific_pages', 10, 2);
編寫此代碼的方法可能更短一些,但是為了清楚起見,我將其按原樣呈現。
從站點地圖中排除特定文章
與以前的技術類似,要從自動生成的WordPress網站地圖中排除特定的文章,請執行以下操作:
// disable specific post function shapeSpace_disable_sitemap_specific_post($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'][] = 1; // exclude post with ID = 1 return $args; } add_filter('wp_sitemaps_posts_query_args', 'shapeSpace_disable_sitemap_specific_post', 10, 2);
和以前一樣。僅在此處注意函數中的第一行,我們正在檢查a是否$post_type等于post。然后魔術發生在第三行,我們排除了ID等于1的文章(著名的“ Hello World”文章)。因此,將該ID更改為您要排除并完成的任何文章。
要排除多個帖子,上述技術將是相同的,但是增加了更多的“排除”行:
// disable specific posts function shapeSpace_disable_sitemap_specific_posts($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'][] = 1; // exclude post with ID = 1 $args['post__not_in'][] = 2; // exclude post with ID = 2 $args['post__not_in'][] = 3; // exclude post with ID = 3 $args['post__not_in'][] = 4; // exclude post with ID = 4 $args['post__not_in'][] = 5; // exclude post with ID = 5 return $args; } add_filter('wp_sitemaps_posts_query_args', 'shapeSpace_disable_sitemap_specific_posts', 10, 2);
這一切都非常簡單,這要歸功于WordPress核心開發人員,他們為我們提供了非常靈活的API,可以自定義。
根據元字段排除文章
也可以根據其附加的元數據排除特定的文章。例如,如果您的文章有一個名為sitemap
的元字段。并且您只想包含sitemap
值為1
的文章。添加以下代碼以使其實現:
// disable post based on meta field function shapeSpace_disable_sitemap_post_meta($args, $post_type) { if ('post' !== $post_type) return $args; // can be any post type $args['meta_query'] = isset($args['meta_query']) ? $args['meta_query'] : array(); $args['meta_query'][] = array( 'key' => 'sitemap', // can be any meta key 'value' => '1', // can be any meta value 'compare' => '=', // can use any comparison ); return $args; } add_filter('wp_sitemaps_posts_query_args', 'shapeSpace_disable_sitemap_post_meta');
對于這項技術,我們再次使用wp_sitemaps_posts_query_args過濾器掛鉤。可以修改該技術以匹配幾乎任何文章集。查看Meta API,以更好地了解可能發生的情況。
檢查站點地圖是否已啟用
正如前面所述,在WordPress可以很容易地禁用/啟用的站點地圖功能。因此,如果您要自定義內容,了解站點上是否啟用了WP?Sitemaps可能會很有用。這是執行此操作的代碼:
if (wp_sitemaps_get_server()->sitemaps_enabled()) { // sitemaps enabled } else { // sitemaps not enabled }
此代碼使用wp_sitemaps_get_server()調用該sitemaps_enabled方法,該方法返回一個值,如果啟用了站點地圖則返回true,反之返回false。重要提示:所有此站點地圖功能僅在WordPress 5.5及更高版本中可用。因此,如果您正在開發任何插件或主題,請確保對任何較舊的WP版本使用條件檢查和適當的后備。
從robots.txt中排除站點地圖規則
啟用站點地圖后,WordPress會自動將以下規則添加到您站點的虛擬動態生成的robots.txt文件中:
Sitemap: https://example.com/wp-sitemap.xml
該行告訴搜索引擎和漫游器在哪里可以找到您的站點地圖,這是一件好事。但是,出于某些原因,您想要自定義漫游器站點地圖規則,甚至完全禁用它。因此,如果您需要執行此操作,請使用以下代碼從robots.txt排除站點地圖規則:
// do not add sitemap rule to robots.txt function shapeSpace_disable_sitemap_robots($wp_sitemaps) { remove_filter('robots_txt', array($wp_sitemaps, 'add_robots')); } add_action('wp_sitemaps_init', 'shapeSpace_disable_sitemap_robots');
初始化Sitemaps對象時會觸發wp_sitemaps_init鉤子。注意:如果“發現”搜索引擎無法訪問該網站,則未添加robots.txt站點地圖規則(由WP常規設置“搜索引擎可見性”確定)。因此,啟用該設置后,不需要上面的代碼。
問題未解決?付費解決問題加Q或微信 2589053300 (即Q號又微信號)右上方掃一掃可加博主微信
所寫所說,是心之所感,思之所悟,行之所得;文當無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!