The following code will automatically create a sitemap.xml when a post or page is first published.
This is a non-plugin way to automatically create the sitemap.xml file – less bloat, straight to the point.
Instructions
- Save the code below to your preferred location (if you haven’t already I highly recommend you create a WordPress plugin for your custom functions)
- Hit update on an existing page or post to generate a new sitemap.xml file
- Check the new sitemap.xml file is accessible via the web – e.g. https://www.itsupportguides/sitemap.xml
- Optional: Submit the sitemap to Google for indexing
If you’re not sure where to place this code I highly recommend you read How to create a WordPress plugin for your custom functions.
add_action( 'publish_post', 'itsg_create_sitemap' ); add_action( 'publish_page', 'itsg_create_sitemap' ); function itsg_create_sitemap() { $postsForSitemap = get_posts(array( 'numberposts' => -1, 'orderby' => 'modified', 'post_type' => array( 'post', 'page' ), 'order' => 'DESC' )); $sitemap = '<?xml version="1.0" encoding="UTF-8"?>'; $sitemap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; foreach( $postsForSitemap as $post ) { setup_postdata( $post ); $postdate = explode( " ", $post->post_modified ); $sitemap .= '<url>'. '<loc>' . get_permalink( $post->ID ) . '</loc>' . '<lastmod>' . $postdate[0] . '</lastmod>' . '<changefreq>monthly</changefreq>' . '</url>'; } $sitemap .= '</urlset>'; $fp = fopen( ABSPATH . 'sitemap.xml', 'w' ); fwrite( $fp, $sitemap ); fclose( $fp ); }