Jalara Studio

Die Datei sitemap.xml ohne das Plugin Yoast SEO erstellen

#

# #


Der folgende Codeschnipsel von Emrah Gunduz1, eingefügt in die Datei functions.php im Child Theme oder in ein eigenes Plugin, erstellt nach dem Veröffentlichen eines neuen Beitrages die Datei sitemap.xml2. Die Datei lässt sich danach unter der URL WEBSITE.EXAMPLE/sitemap.xml aufrufen. (Ersetze WEBSITE.EXAMPLE mit deiner Domain.)

function erstelle_sitemap() {
    $posts_for_sitemap = get_posts( array(
        'numberposts' => -1,
        'orderby' => 'modified',
        'order' => 'DESC',
        'post_type' => array( 'post' )
        ) );
    $sitemap = '<?xml version="1.0" encoding="UTF-8"?>';
    $sitemap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
    foreach( $posts_for_sitemap as $post ) {
       setup_postdata( $post );
       $postdate = explode( " ", $post->post_modified );
       $sitemap .= '<url>'.
        '<loc>'. get_permalink( $post->ID ) .'</loc>'.
        '<lastmod>'. $postdate[0] .'</lastmod>'.
        '<changefreq>weekly</changefreq>'.
        '</url>';
    }
    $sitemap .= '</urlset>';
    $fp = fopen( ABSPATH . "sitemap.xml", 'w' );
    fwrite( $fp, $sitemap );
    fclose( $fp );
}
add_action( 'publish_post', 'erstelle_sitemap' );

Die Funktion erstelle_sitemap() wurde an den Action Hook 'publish_post'3 angehangen und wird daher erst ausgelöst, sobald ein neuer Beitrag (engl. post) veröffentlicht wird. Einträge von weiteren Post Types lassen sich ebenfalls in die Datei sitemap.xml übernehmen. Sollen beispielsweise die Seiten und die Einträge vom Custom Post Type Portfolio mit übernommen werden, muss der Passus aus Zeile 6 entsprechend angepasst werden: 'post_type' => array( 'post', 'page', 'portfolio' ).
Damit die Datei sitemap.xml die Seiten und Portfolio-Einträge aufnimmt, muss entweder ein neuer Beitrag erstellt oder die Funktion erstelle_sitemap() ebenfalls den jeweiligen Veröffentlichungsaktionen mitgegeben werden:

add_action("publish_page", "erstelle_sitemap");
add_action("publish_portfolio", "erstelle_sitemap");