Nachdem ich in den letzten Tagen alle meine verteilten WordPress-Installationen in ein Netzwerk umgezogen habe, musste ich mit Schrecken feststellen, dass “mein” Sitemaps-Plugin Google XML Sitemaps zwar in einer Version mit Multisite support existiert, aber dass dabei das Domain Mapping nicht funktioniert und alle in der Sitemaps enthaltenen Domains eben Subdomains des Hauptblogs sind. Da ich nun aber auch, wie sicherlich viele andere, ein Domain Mapping benutze (und das Netzwerk eingerichtet habe, um alle meine WordPress-Seiten von einem Ort aus verwalten zu können), war die Kombination nicht sehr optimal.
Selbst nach mehreren Stunden Lektüre war keine Lösung in Sicht, daher habe ich mich dafür entschieeden, das Google XML Sitemaps with Multisite support-Plugin selbst zu reparieren.
Dies geht ganz fix: Wenn man die Struktur beider Plugins erstmal durchschaut hat, sind nur an ein paar Stellen einige Änderungen vorzunehmen. Alle folgenden Ersetzungen sind in der Datei sitemap-core.php von Google XML Sitemaps with Multisite support vorzunehmen. Bitte beachten: durch die Modifikation wird das Plugin unbrauchbar für Installationen ohne das Domain Mapping-Plugin. Ausserdem ist die in die virtuelle robots.txt eingetragene Sitemaps zumindest bei mir (noch) falshc verlinkt, weshalb ich diese Funktion bisweilen deaktiviert habe. Möglicherweise reiche ich ein entsprechendes Bugfix später nach.
Die von mir verwendeten Versionen sind (zum jetzigen Zeitpunkt jeweils aktuelle, stabile Releases):
- WordPress 3.1,
- Google XML Sitemaps with Multisite Support v4.0.2,
- WordPress MU Domain Mapping v0.5.4.
In der Datei sind folgende Zeilen zu ersetzen:
1. Ersetze
return trailingslashit(get_bloginfo('url')) . $this->GetOption("b_filename");
durch
return trailingslashit(domain_mapping_post_content(get_bloginfo('url'))) . $this->GetOption("b_filename");
2. Ersetze
$url = $this->GetPluginUrl();
durch
$url = domain_mapping_siteurl(false) . substr($url, stripos($url, PLUGINDIR) - 1);
3. Ersetze
$home = get_bloginfo('url');
durch
$home = domain_mapping_post_content(get_bloginfo('url'));
4. Ersetze
$permalink = get_permalink($post->ID);
durch
$permalink = domain_mapping_post_content(get_permalink($post->ID));
5. Ersetze
$this->AddUrl(get_category_link($cat->term_id), 0, $this->GetOption("cf_cats"), $this->GetOption("pr_cats"));
durch
$this->AddUrl(domain_mapping_post_content(get_category_link($cat->term_id)), 0, $this->GetOption("cf_cats"), $this->GetOption("pr_cats"));
6. Ersetze
$this->AddUrl($url, $this->GetTimestampFromMySql($arcresult->last_mod), $changeFreq, $this->GetOption("pr_arch"));
durch
$this->AddUrl(domain_mapping_post_content ($url), $this->GetTimestampFromMySql($arcresult->last_mod), $changeFreq, $this->GetOption("pr_arch"));
7. Ersetze
$this->AddUrl($url, $this->GetTimestampFromMySql($author->last_post), $this->GetOption("cf_auth"), $this->GetOption("pr_auth"));
durch
$this->AddUrl(domain_mapping_post_content ($url), $this->GetTimestampFromMySql($author->last_post), $this->GetOption("cf_auth"), $this->GetOption("pr_auth"));
8. Ersetze
$this->AddUrl(get_tag_link($tag->term_id), 0, $this->GetOption("cf_tags"), $this->GetOption("pr_tags"));
durch
$this->AddUrl(domain_mapping_post_content(get_tag_link($tag->term_id)), 0, $this->GetOption("cf_tags"), $this->GetOption("pr_tags"));
Das war’s schon. Der hier vorgeschlagene Bugfix ist Quick & Dirty (= alle Angaben ohne Gewähr und Pistole). Über Feedback würde ich mich natürlich wie immer freuen.
Ähnliche Beiträge: