I used this trick several years ago, and I was surprised that sitemap generation plugins still do not use it.

I tried these plugins:

Of all those plugins, Yoast SEO is the only one that implements this feature.

I must say that this trick won’t make sitemap generation drastically faster; it will just reduce your site’s load a bit. If your favorite plugin does not implement it, there is probably nothing to worry about 🙂

Sitemap generation plugins often use the template_redirect hook to display the sitemap (like this). However, lots of things happen before that action fires: muplugins_loaded, plugins_loaded, setup_theme, after_setup_theme, init, widgets_init (fires during the init action), wp_loaded, parse_request, send_headers, parse_query, pre_get_posts, wp, template_redirect. And, this list is not exhaustive.

When we display the sitemap (which is an XML file), we clearly don’t need widgets.

add_action( 'plugins_loaded', 'my_plugins_loaded' );

function my_plugins_loaded() {
    // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- we only need raw 4 last characters of the REQUEST_URI, no need to waste time sanitizing the string
    $request_uri = (string) ( $_SERVER['REQUEST_URI'] ?? '' );
    $extension   = strtolower( substr( $request_uri, -4 ) );

    if ( in_array( $extension, [ '.xml', '.xsl' ], true ) && false !== stripos( $request_uri, 'sitemap' ) ) {
        add_action( 'after_setup_theme', 'my_after_setup_theme', PHP_INT_MAX );
    }
}

function my_after_setup_theme() {
    remove_all_actions( 'widgets_init' );
}

This code checks whether the current request is for an XML file (the last four characters of the path are .xml or .xsl) and whether the request path contains the word sitemap`. If so, it registers a handler for the after_setup_theme action and removes all registered handlers for the widgets_init hook. We use the after_setup_theme hook instead of plugins_loaded because the theme may install its own widgets, and we need to remove them as well.

How to Improve Performance of Sitemap Generation in WordPress
Tagged on:         

Leave a Reply

Your email address will not be published. Required fields are marked *