Vor drei Tagen fragte ich mich, wie ich die Custom Taxonomies in die Sitewide Tags Pages integrieren kann. Jetzt habe ich eine Lösung.
Das Plugin von Donncha arbeit mit einem leicht verständlichen Ansatz. In einem Hook der beim Speichern eines Beitrages (save post) ausgeführt wird, werden einfach die Daten des Beitrages ausgelesen und in einem definierten globalen Blog gespeichert. Berücksichtigt werden alle Daten, die standartmäßig ein Beitragsartikel umfasst. Da es sich bei den Custom Taxonomies aber um eine Erweiterung handel, ist das natürlich nicht gleich vorgesehen.
WordPress bietet für das Arbeiten mit den Taxonomien einige Funkionen die alle in der Datei taxonomy.php zu finden sind. Benutzt habe ich letztenendes drei.
wp_get_object_terms(), um die Terms einer hier fest definierten Taxonomie des aktuellen Blogbeitrages auszulesen, wp_delete_object_term_relationships(), um die vorhandene Term-Beitrags Beziehungen wieder löschen zu können und wp_set_object_terms(), um die Taxonomie-Term-Betrag Beziehung im globalen Blog zu schreiben.
function sitewide_tags_post( $post_id, $post ) {
...
...
if ( get_blog_status($post_blog_id, "public") == 0 )
return;
// custom taxonomy 'my_custax' abfrage im aktuellen Blogbeitrag
$my_custax = wp_get_object_terms($post_id, 'my_custax', array('fields' => 'names'));
…
if( $global_post->ID != '' ) {
$post->ID = $global_post->ID; // editing an old post
/* using this kind of update not simple add: fixing permalink-problems */
delete_post_meta( $global_post->ID, "permalink");
// zum Editieren muss vor die Beitrag-Term Beziehung gelöscht werden
wp_delete_object_term_relationships( $global_post->ID, 'my_custax' );
…
$p = wp_insert_post( $post );
add_post_meta( $p, "permalink", $permalink );
// wenn custom taxonomies vorhanden, werden jetzt im Global-Blog gespeichert
if ($my_custax !='') {
wp_set_object_terms($p, $my_custax, 'my_custax', $append = false);
}
Eine Ergänzung fehlt noch. Beim Speichern des aktuellen Blogbeitrages werden zwei Hooks ausgeführt, die wichtig für unser Ziel sind. Der erste Hook im Custom Taxonomies Plugin speichert die Taxonomie natürlich im aktuellen Blogbeitag und der zweite Hook im Sitewide Tags Pages Plugin speichert die Custax im globalen Blogbeitrag. Wichtig ist natürlich, dass der erste Hook vor dem Zweiten ausgeführt wird.
Da genau das nicht gleich der Fall ist, hatte ich bis dahin nur das Ergebnis, dass die Custax im globalen Blogbeitrag erst beim zweiten Speichern des aktuellen (lokalen) Beitrages übernommen wurde. Es dauerte auch eine ganze Weile bis drauf gekommen, ist aber auch wieder simpel zu lösen, da man eine Priorität der Abfolge einstellen kann.
add_action ( ‘hook_name’, ‘your_function_name’, [priority], [accepted_args] );
…
priority is an optional integer argument that can be used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action.
Die Ergänzung muss dieses Mal im Custom Taxonomies Plugin in der Datei custax.class. in Zeile 100 geschehen.
von
add_action('save_post', array(&$this, 'save'));
zu
add_action('save_post', array(&$this, 'save'), 9);
Voraussetzung fürs Funktionieren ist natürlich, dass auch im Global-Blog das Custax Plagin läuft, sonst wird nur gespeichert, aber ohne dass man damit etwas machen kann. Optimal wäre dann noch sinnvoll, wenn über eine Abfrage entweder alle vorhandenen Taxonomien (ausgenommen Kategorien und Tags) automatisch übernommen werden, oder die Möglichkeit ergänzt wird, die zu übertragenden Taxonomien für das Sidewide Tags Pages Plugin über die Plugin-Administration zu bestimmen.


Es ist noch nicht DIE Lösung. Durch das automatische Speichern werden immernoch ID Nummern gespeichert. Werd noch mal schauen.