Fehler behoben: PlugIn arbeitet jetzt auch korrekt, wenn man die Seiten-Zuordnungen (”Mutterseiten”) ändert.

Seiten sortieren - ohne PlugIn unbequem

Wenn man seine statischen Seiten in die gewünschte Reihenfolge bringen möchte, zeigt sich Wordpress ziemlich unkomfortabel. Es macht einfach keinen Spaß, jede Seite einzeln anzuwählen, im “Bearbeiten”-Menü im Feld “Reihenfolge” die benötigte Nummer einzugeben, die Seite abzuspeichern - und diese Prozedur unter Umständen mit zwanzig Seiten zu wiederholen.

Sehr viel praktischer gestalten sich derlei Arbeiten mit dem PlugIn “Mass Edit Pages”. Nach dessen Installation kann Wordpress über einen neuen Menüpunkt im Admin-Bereich alle Seiten sortiert nach “menu_order” anzeigen, neben jeder Seite ist ein Dropdown-Feld, in dem man jeweils die übergeordnete Seite auswählen kann - und außerdem ein Eingabefeld für die “Reihenfolgen-Nummer” (menu_order). Man kann munter alles ausfüllen, ein einziges Mal einen Knopf drücken - und so mit einem Klick alle Änderungen ausführen, wozu man sonst mitunter reichlich lange gebraucht hätte.

Das PlugIn “Mass Edit Pages” funktioniert leider nur für Wordpress 1.5x und 2.0x. Unter Wordpress 2.1 kann man es zwar ohne Fehlermeldungen installieren - aber es zeigt schlichtweg keine Seiten zum Bearbeiten an. Mit ein paar Änderungen bekommt man Mass Edit Pages jedoch auch für Wordpress 2.1 zum Laufen.

 

Anpassung für Wordpress 2.1

Im Grunde genommen ist eine “page” nichts anderes als ein “post” - Die Unterscheidung wurde früher über die Eigenschaft “post_status” vorgenommen:

  • post_status = published Für normale Beiträge
  • post_status = static Für statische Seiten

Wordpress 2.1 arbeitet ein bisschen anders - jetzt ist eine neue Eigenschaft hinzugekommen, nämlich “post_type”:

  • post_type= post Für normale Beiträge
  • post_type = page Für statische Seiten

Daher ist es klar, dass “Mass Edit Pages” bei Wordpress 2.1 keine Seitenliste anzeigt, denn die Abfrage fragt in alter Manier nach dem “post_status” und nicht nach dem “post_type”. Es ergibt sich also folgende Änderung:

Die Abfrage in Zeile 70

$pages = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_status = 'static' ORDER BY menu_order");

muss umgebaut werden in

$pages = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = 'page' ORDER BY menu_order");

… und damit funktioniert das Plugin schon. Jedenfalls, sofern man die Cache-Funktion nicht aktiviert, und man die Zuordnungen der “Mutterseiten” nicht geändert hat. In der Datenbank werden zwar die über das PlugIn erzeugten Änderungen eingetragen, aber der Cache hat noch den alten Zustand, und so werden die geänderten Reihenfolgen nicht angezeigt, und Seiten mit einer geänderten “Mutterseite” werden nicht gefunden.

Der Seiten-Baum muss aktualisiert und der jetzt veraltete Cache muss gelöscht werden. Das erreicht man dort, wo “Mass Edit Pages” die im Menü eingetragenen Änderungen ausführt, nämlich in der Schleife Zeile 42 bis 48:

while ($i < $ii) :
		$ID = $_POST[ID][$i];
		$post_parent = $_POST[post_parent][$i];
		$menu_order = $_POST[menu_order][$i];
		$wpdb->query("UPDATE $wpdb->posts SET post_parent='$post_parent', menu_order='$menu_order' WHERE ID=$ID");
	$i++;
endwhile;
	

Dort die Anweisung zum Leeren des Seiten Cache nachtragen und die jeweilige Seite updaten:

while ($i < $ii) :
		$ID = $_POST[ID][$i];
		$post_parent = $_POST[post_parent][$i];
		$menu_order = $_POST[menu_order][$i];
		$wpdb->query("UPDATE $wpdb->posts SET post_parent='$post_parent', menu_order='$menu_order' WHERE ID=$ID");
		clean_page_cache($ID); // else you won't see any effect, if caching is active!
		wp_update_post($ID); // else you'll get 404-errors after changing the post_parents!
	$i++;
endwhile;
	

Jetzt sieht man alle Änderungen gleich, nachdem sie ausgeführt wurden - und Änderungen am Seiten-Baum sollten keine 404-Fehler mehr verursachen.

 

Download

Die geänderte Version des PlugIns kann direkt hier heruntergeladen werden:
mass-edit-pages-21.zip