Wordpress

Wordpress

Posts 1-10 of 25
  • Hendrik Luehrsen
    Hendrik Luehrsen
    The company name is only visible to registered members.
    News Sitemaps für Google ohne Plugin
    Oft stehen Webmaster vor dem Problem, dass Google für eine bessere Indexierung eine Google Sitemap fordert, ein entsprechendes Plugin jedoch mehr Last auf den Server erzeugt. Obwohl Google eher Selten die Seite besucht und die Sitemap abruft, ein Plugin wird bei jedem Pageload jedes Users initiert - wenn es nicht entsprechend geschrieben ist. Für die meisten Seiten mag dieser Gedanke überflüssig sein, jedoch gerade stark besuchte Seiten leiden bei vielen Plugins unter starken Ladezeiten. Und auf diesem Wege spart man sich halt ein Plugin.

    Im Folgenden will ich eine elegante Möglichkeit aufzeigen, wie man eine News Sitemap über einen Feed realisiert, sprich die entsprechende Datei wird nur geladen, wenn der Feed tatsächlich abgerufen wird.

    Also, auf ins Eingemachte.

    --------------------------------------------------------------------

    Im Theme Ordner (i.d.R. "/wp-content/themes/xxx/") erstellen wir die Datei "news_sitemap.php". Die Datei sollte folgenden Inhalt haben, die Funktion sollte sich durch die Kommentare ergeben:


    === PHP CODE ===

    <?
    header("Content-Type: application/xml; charset=" . get_option('blog_charset'));

    // Wir erstellen ein neues XML Dokument
    $_news_sitemap = new DOMDocument("1.0", get_option('blog_charset'));
    $_news_sitemap->formatOutput = true;

    // Das Wrapper Element der News Sitemap namens "Urlset"
    $_urlset = $_news_sitemap->createElement( "urlset" );
    $_urlset->setAttribute( "xmlns" , "http://www.sitemaps.org/schemas/sitemap/0.9" );
    $_urlset->setAttribute( "xmlns:news" , "http://www.google.com/schemas/sitemap-news/0.9" );

    $_news_sitemap->appendChild( $_urlset );


    // Google News nimmt nur Content aus den letzten 2 Tagen auf
    function filter_where($where = '') {
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-2 days')) . "'";
    return $where;
    }

    // Den Filter anwenden
    add_filter('posts_where', 'filter_where');

    // Wir bauen einen Sprachcode nach ISO 639
    $pub_lang = get_locale();
    $pub_lang = explode("_", $pub_lang);
    $pub_lang = $pub_lang[0];

    // Die passenden Posts für die Anzeige holen
    query_posts($query_string);


    // Hier beginnt der Loop
    while( have_posts()) : the_post();


    // Aus den Post Tags bauen wir ein Array für die Keywords
    $post_tags = get_the_tags();
    if ($post_tags) {
    foreach($post_tags as $tag) {
    $the_tags[] = $tag->name;
    }
    }

    // Ab hier wird für jeden Post die entsprechende XML Struktur zusammen gestellt
    $_url = $_news_sitemap->createElement("url");
    $_urlset->appendChild( $_url );

    $_loc = $_news_sitemap->createElement("loc", get_permalink($id) );
    $_url->appendChild( $_loc );

    $_news_news = $_news_sitemap->createElement("news:news");
    $_url->appendChild( $_news_news );

    $_news_publication = $_news_sitemap->createElement("news:publication");
    $_news_news->appendChild( $_news_publication );

    $_news_name = $_news_sitemap->createElement("news:name", get_bloginfo("name"));
    $_news_publication->appendChild( $_news_name );

    $_news_language = $_news_sitemap->createElement("news:language", $pub_lang);
    $_news_publication->appendChild( $_news_language );

    $_news_publication_date = $_news_sitemap->createElement("news:publication_date", get_the_date("c"));
    $_news_news->appendChild( $_news_publication_date );

    $_news_title = $_news_sitemap->createElement("news:title", get_the_title());
    $_news_news->appendChild( $_news_title );

    $_news_keywords = $_news_sitemap->createElement("news:keywords", implode(", ", $the_tags));
    $_news_news->appendChild( $_news_keywords );


    // Hier ist der Loop zuende
    endwhile;

    // Und die Sitemap muss nur noch ausgegeben werden
    echo $_news_sitemap->saveXML();

    ?>

    ================

    Jetzt haben wir die Ausgabe der Datei entsprechend formatiert, alles was man jetzt noch tun muss ist eben die "news_sitemap.php" als Feed bei Wordpress einzubinden. Das macht man in der Datei "functions.php" des Themes. Dort fügt man innerhalb der <? ?> folgenden Code hinzu:

    === PHP CODE ===

    // Wir registrieren die Sitemap
    function create_news_sitemap(){
    global $more;
    $more = 0;
    load_template( TEMPLATEPATH . '/news_sitemap.php');
    }

    add_action('do_feed_news_sitemap', 'create_news_sitemap', 10, 1);

    // Wir fügen die Rewrite Rules hinzu
    function custom_feed_rewrite($wp_rewrite){
    $feed_rules = array(
    'feed/(.+)' => 'index.php?feed=' . $wp_rewrite->preg_index(1),
    '(.+).xml' => 'index.php?feed='. $wp_rewrite->preg_index(1)
    );
    $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
    }

    add_filter('generate_rewrite_rules', 'custom_feed_rewrite');


    // Wir fügen die Sitemap zur robots.txt hinzu
    function xml_sitemap_robots_news() {
    echo "\nSitemap: ".get_bloginfo("url")."/news_sitemap.xml\n\n";
    }

    add_action('do_robotstxt', 'xml_sitemap_robots_news');

    ================

    Um die Permalinkstruktur zu aktualisieren sollte man nun noch mal in Einstellungen->Permalinks gehen und da einfach mal speichern. Die News-Sitemap sollte nun unter folgenden URLs verfügbar sein:

    http://www.dein-blog.de/news_sitemap.xml
    http://www.dein-blog.de/feed/news_sitemap/
    http://www.dein-blog.de/?feed=news_sitemap

    --------------------------------------------------------------------

    Ich hoffe ich konnte euch ein bisschen weiter helfen, bei Fragen oder Anmerkungen einfach hier rein posten.
  • Thomas Fanselow
    Thomas Fanselow
    The company name is only visible to registered members.
    Re: News Sitemaps für Google ohne Plugin
    Super, vielen dank für diese Programmierung. Ich war schon länger auf der Suche nach einer Möglichkeit eine Sitemap ohne Plugin zu erstellen.

    Wenn ich darf möchte ich den Code gerne in meinem Blog publizieren. Selbstverständlich mit Hinweis und Link auf Sie.

    Freue mich von Ihnen zu lesen.

    Mit grüßen aus dem wunderschönen Wien.

    Thomas Fanselow
    http://www.fanstars.de/hotelmarketing
  • Hendrik Luehrsen
    Hendrik Luehrsen
    The company name is only visible to registered members.
    Re^2: News Sitemaps für Google ohne Plugin
    Hallo Herr Fanselow,

    natürlich dürfen Sie ohne weiteres den Code gerne verwenden, dafür steht er hier.

    Ich bitte jedoch zu beachten, dass es sich hierbei um eine Google News Sitemap hat, die ist noch etwas anders als eine klassische Google Sitemap. Nur damit es nicht zu Verwechselungen kommt. :)

    MfG
    Hendrik Luehrsen
  • Thomas Fanselow
    Thomas Fanselow
    The company name is only visible to registered members.
    Re^3: News Sitemaps für Google ohne Plugin
    Danke

    Das es Googlenews betrifft ist mir schon klar.
  • Post visible to registered members
  • Hendrik Luehrsen
    Hendrik Luehrsen
    The company name is only visible to registered members.
    Re^5: News Sitemaps für Google ohne Plugin
    Hallo Sebastian,

    kontaktiere mich doch mal. :)

    Gruß,
    Hendrik
  • Hendrik Luehrsen
    Hendrik Luehrsen
    The company name is only visible to registered members.
    Re^6: News Sitemaps für Google ohne Plugin
    Wenns um starsonTV geht, dann glaub ich, dass ich den Fehler schon gefunden hab. Und zwar schlägt das Feedburner Plugin anscheinend fies dazwischen und leitet automatisch alle Feed Anfragen zu Feedburner um, also auch die News Sitemap. :)

    Also muss man leider sagen, das Script oben ist mit dem Feedburner Plugin inkompatibel. Aber coole Seite.

    Gruß,
    Hendrik
  • Post visible to registered members
  • Post visible to registered members
  • Hendrik Luehrsen
    Hendrik Luehrsen
    The company name is only visible to registered members.
    Re^9: News Sitemaps für Google ohne Plugin
    Scheint zu funktionieren.

    http://www.starsontv.com/news_sitemap.xml

    Find ich ne astreine Sitemap. Bei Webmaster Tools anmelden nich vergessen. :)

    Edit:
    Neue Beiträge sollten sofort auftauchen, da kein Caching im Plugin vorgenommen wird. Das überlasse ich den Caching Plugins wie W3 oder Konsorten. Im Grunde ist der XML Output auch nur ne Abwandlung von nem Theme. :)
    This post was modified on 19 Jan 2011 at 04:52 pm.