get_terms name__ähnliche Listenkategorien nach Buchstaben

Meine Kategorien sind im Grunde Autoren, und ich möchte eine function erstellen, um sie nach ihrem Nachnamen aufzulisten. Zum Beispiel möchte ich etwas haben wie:

E:

  • Heinz Erhardt
  • Albert Einstein
  • Eminem

Das Problem ist, ich habe auch Autoren mit nur einem Namen (wie “Eminem”), die ich auch gerne nach dem Buchstaben E sortieren würde. Die einzige Möglichkeit, dies in WordPress zu tun, ist mit der function get_terms und der name__like .

 function getAuthors(){ $args = array( 'name__like' => 'E', ); return get_terms('category', $args ); } 

Dadurch wird die SQL-Abfrage erstellt, die nur Kategorien mit einem “E” enthält:

 AND t.name LIKE %E%; 

Ich brauche jedoch etwas wie:

 AND t.name NOT LIKE '% %' AND t.name LIKE E% OR t.name LIKE '% E'; 

Ich habe versucht, den Code in der function get_terms in der Core-Datei zu ändern, in der die Abfrage eingerichtet ist (taxonomies.php, Zeile 1809). Allerdings war ich nicht erfolgreich und ich würde nicht gerne etwas in den coredateien ändern.

Wie kann ich die Abfrage anpassen, die mit dem name__like ? Gibt es andere bessere Möglichkeiten, um mein Ziel zu erreichen?

— BEARBEITEN —

Ich benutzte die Lösung von TheDeadMedic und war in der Lage, Kategorien nach einem bestimmten Buchstaben get_terms( 'my_taxonomy', 'surname=E' ); zum Beispiel get_terms( 'my_taxonomy', 'surname=E' ); Dieses surname Argument funktioniert jedoch nicht, wenn ich die function get_terms mehrmals auf einer Seite verwenden get_terms (zum Beispiel in einer Schleife – wenn ich AZ-Überschriften erstellen und die entsprechenden sortierten Kategorien unterhalb der Überschriften anzeigen möchte).

Hier ist die function, die ich ausführen möchte. Das Problem ist, dass es nur die Kategorien für surname=A unter jeder Überschrift auflistet.

 function getAuthors() { $letters = range('A', 'Z'); // create Alphabet array foreach ($letters as $letter) { echo '

' . $letter . '

'; $args = array( 'surname' => $letter ); $cats = get_terms('category', $args); foreach ($cats as $cat) { echo "
    "; echo "
  • " . $cat->name . "
  • "; echo "
"; } } }

Das name__like Argument scheint jedoch in der Schleife zu funktionieren.

Solutions Collecting From Web of "get_terms name__ähnliche Listenkategorien nach Buchstaben"

Verwenden Sie den Filter terms_clauses , der alle verschiedenen Komponenten der Abfrage (fields, join, wo, orderby, order & limits) übergibt und ein eigenes “search” -Argument implementiert:

 function wpse_178511_get_terms_fields( $clauses, $taxonomies, $args ) { if ( ! empty( $args['surname'] ) ) { global $wpdb; $surname_like = $wpdb->esc_like( $args['surname'] ); if ( ! isset( $clauses['where'] ) ) $clauses['where'] = '1=1'; $clauses['where'] .= $wpdb->prepare( " AND t.name LIKE %s OR t.name LIKE %s", "$surname_like%", "% $surname_like%" ); } return $clauses; } add_filter( 'terms_clauses', 'wpse_178511_get_terms_fields', 10, 3 ); 

In Gebrauch genommen:

  get_terms( 'my_taxonomy', 'surname=E' );