WordPress Anfrage Fiter Reihenfolge von verwandten Post post_title

Ich habe zwei benutzerdefinierte WordPress-Post-Typen erstellt (Schule, Person). Jede Person ist mit einer Schule verbunden und die Post- ID der zugehörigen Schule wird in wp_postmeta unter der Post- ID der Person mit meta_key = 'person-school-id' und meta_value = der Post- ID der zugehörigen Schule meta_value .

Ich habe einen person-type (Student, Lehrer usw.) und den Namen der entsprechenden Schule (durch Extrahieren des post_title der entsprechenden Schule) zur Liste WP manage_person_posts_columns der Person über WP manage_person_posts_columns und manage_person_posts_custom_column Aktionen manage_person_posts_custom_column .

Ich habe die Filterfähigkeiten sowohl für den Persontyp als auch für die Person person-school-id zu der Person WP edit.php Liste über die WP restrict_manage_posts Aktion hinzugefügt.

Und ich habe Sortiermöglichkeiten für den person-type zur Person WP edit.php Liste über den WP request Filter hinzugefügt.

 $vars = array_merge( $vars ,array( 'meta_key' => 'person-type', ,'orderby' => 'meta_value' ) ); 

So weit, ist es gut. All dies funktioniert wie erwartet.

Aber ich muss auch post_title für den Namen der verwandten Schule hinzufügen ( post_title ). Ich könnte leicht nach der zugehörigen Schulpost person-school-id ID sortieren (weil das im wp_postmeta- person-school-id Feld meta_value der person-school-id meta_value ist), indem Sie während des WP- request Folgendes hinzufügen:

 $vars = array_merge( $vars ,array( 'meta_key' => 'person-school-id', ,'orderby' => 'meta_value' ) ); 

Aber ich muss wirklich nach dem post_title (nicht nach der ID ) des post_title dessen Post- ID im Feld meta_value der person-school-id für die person-school-id meta_key . Etwas wie:

,'orderby' => 'select post_title from wp_posts where ID = ' . meta_value

Offensichtlich funktioniert das Obige nicht.

All dies zu fragen: Wie kann ich bestellen durch die post_title eines verwandten Post, dessen Post- ID ist in einem anderen Beitrag wp_postmeta meta_value Feld während der Bearbeitung der WordPress- request Filter?

Solutions Collecting From Web of "WordPress Anfrage Fiter Reihenfolge von verwandten Post post_title"

Nach einer kurzen schlaflosen Nacht, in der mir das durch den Kopf läuft, habe ich eine Lösung, die funktioniert. Ich bin nicht sicher, ob es die beste Lösung ist, aber für diejenigen, die ein ähnliches Problem haben, hier ist, was ich getan habe.

Zuerst habe ich aufgegeben, den WordPress- request für diese bestimmte Reihenfolge zu verwenden. Stattdessen habe ich den WP posts_clauses- Filter wie folgt verwendet:

 add_filter( 'posts_clauses', 'my_posts_clauses_filter', 20, 1 ); function my_posts_clauses_filter( $pieces ) { global $wpdb; if ( isset( $_GET[ 'post_type' ] ) and isset( $_GET[ 'orderby' ] ) and 'person' == $_GET[ 'post_type' ] and 'person_school' == $_GET[ 'orderby' ] and ( 'ASC' == $_GET[ 'order' ] or 'DESC' == $_GET[ 'order' ] ) ) { $pieces[ 'join' ] .= " INNER JOIN {$wpdb->postmeta} my_postmeta1 ON ( {$wpdb->posts}.ID = my_postmeta1.post_id AND my_postmeta1.meta_key = 'person-school-id' )"; $pieces[ 'join' ] .= " INNER JOIN {$wpdb->posts} my_posts1 ON ( my_posts1.ID = my_postmeta1.meta_value )"; $pieces[ 'orderby' ] = 'my_posts1.post_title ' . $_GET[ 'order' ]; } return $pieces; } 

Das ist es.

Einmal zur Vorsicht. Dies könnte unbeabsichtigte Folgen haben. Ich hatte eine andere Routine, die WP_Query verwendete, um eine Liste aller Schulen für das Filtern zurückzugeben. Nach dem Hinzufügen des obigen posts_clauses Filters gab meine Routine “Alle Schulen $_GET nichts zurück, wenn die $_GET Einträge festgelegt wurden. Ich umgehe das, indem ich die WP_Query-Anfrage mit einem remove_filter und add_filter für den obigen posts_clauses Filter posts_clauses .