Jalara Studio

veröffentlicht am

Die Datei sitemap.xml ohne Plugin erstellen

#


Der folgende Codeschnipsel von Emrah Gunduz1, eingefügt in die Datei functions.php im Child Theme, erstellt nach dem Veröffentlichen eines neuen WordPress-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.)

<?php 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"?>' . "\n" . '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
    foreach( $posts_for_sitemap as $post ) {
        setup_postdata( $post );
        $postdate = explode( " ", $post->post_modified );
        $sitemap .= "\t" . '<url>' . "\n" .
             "\t\t" . '<loc>' . get_permalink( $post->ID ) . '</loc>' .
            "\n\t\t" . '<lastmod>' . $postdate[0] . '</lastmod>' .
            "\n\t\t" . '<changefreq>monthly</changefreq>' .
            "\n\t" . '</url>' . "\n";
    }
    $sitemap .= '</urlset>';
    $fp = fopen( ABSPATH . "sitemap.xml", 'w' );
    fwrite( $fp, $sitemap );
    fclose( $fp );
}
add_action( 'publish_post', 'erstelle_sitemap' ); ?>

Erklärung und Anpassung

Die Funktion erstelle_sitemap() wurde dem den Action Hook 'publish_post'3 mitgegeben und wird somit ausgelöst, wenn ein neuer Beitrag (engl. post) veröffentlicht wird.

Einträge von weiteren Post Types lassen sich ebenfalls in der Datei sitemap.xml einfügen. 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" );

Weiterführende Informationen

Es lassen sich weitere XML-Angaben in eine XML-Sitemap einfügen: z.B. wenn die Website mehrsprachig4 angelegt ist, wenn eine News-Sitemap für Google5 6 für eine News-Kategorie oder ein Custom Post Type News erstellt werden soll oder wenn vom Google-Crawler die in die Posts eingebundenen Videos7 8 und Bilder9 (bis zu 1000 <image:image>-Tags sind in einer Sitemap möglich, ansonsten muss sie aufgeteilt werden) berücksichtigt werden sollen.

Links