humanmade/msm-sitemap

为您的WordPress.com VIP网站提供全面的网站地图。

安装数量: 26,019

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 12

分支: 37

开放问题: 0

类型:wordpress-plugin

1.4.2 2020-01-09 22:37 UTC

README

为您的WordPress.com VIP网站提供全面的网站地图。由Metro.co.uk、WordPress.com VIP、Alley Interactive、Maker Media、10up等共同合作。

工作原理

网站地图数据存储

  • 每个日期一个帖子类型的条目。
  • 网站地图XML生成并存储在元数据中。这有几个好处
  • 避免在渲染包含大量帖子的沉重网站地图页面时出现内存和超时问题。
  • 不太可能改变的老旧存档可以更快地提供服务,因为我们不是按需构建它们。
  • 存档页面是按需渲染的。

网站地图生成

我们希望异步生成整个网站地图目录,以避免遇到超时和内存问题。

以下是默认WP-Cron方法的工作原理

  • 获取内容的时间范围。
  • 将这些年份存储在选项表中。
  • 启动第一个年份的cron事件。
  • 计算该年份要处理的月份,并存储在选项中。
  • 启动我们正在处理的年份的第一个月份的cron事件。
  • 计算该年份要处理的日期,并存储在选项中。
  • 启动我们正在处理的月份的第一个日期的cron事件。
  • 生成该日期的网站地图。
  • 找到下一个要处理的日期,并重复,直到我们用完所有日期。
  • 转到下一个月并重复。
  • 当用完所有月份时,转到下一年。

CLI命令

该插件包含一些wp-cli命令,用于简化网站地图创建

$ wp msm-sitemap
usage: wp msm-sitemap generate-sitemap
   or: wp msm-sitemap generate-sitemap-for-year
   or: wp msm-sitemap generate-sitemap-for-year-month
   or: wp msm-sitemap generate-sitemap-for-year-month-day
   or: wp msm-sitemap recount-indexed-posts

See 'wp help msm-sitemap <command>' for more information on a specific command.

过滤网站地图URL

如果您需要过滤通过综合网站地图插件创建的网站地图中显示的URL,有两个考虑因素。首先,如果您正在过滤单独的网站地图,显示特定日期发布的文章的URL,您可以使用msm_sitemap_entry钩子来过滤URL。以下是一个反向代理情况的示例

function example_filter_msm_sitemap_entry( $url ) {
    $location = str_replace( 'example.wordpress.com', 'example.com/blog', $url->loc );
    $url->loc = $location;
    return $url;
}
add_filter( 'msm_sitemap_entry', 'example_filter_msm_sitemap_entry', 10, 1 );

其次,如果您正在过滤根网站地图,显示按日期显示的单独网站地图的URL,您需要直接过滤home_url。没有特定于插件的钩子来过滤根网站地图上的URL。

过滤网站地图索引

使用msm_sitemap_index过滤器根据日期排除索引中的每日网站地图。

add_filter( 'msm_sitemap_index', function( $sitemaps ) {
    $reference_date = strtotime( '2017-09-09' );

    return array_filter( $sitemaps, function ( $date ) use ( $reference_date ) {
        return ( $reference_date < strtotime( $date ) );
    } );
} );