Eine Netzwerkpartnerin betreut seit langer Zeit ein WordPress-Projekt auf dem unter anderem eine Seite mit einer Liste der Mitarbeiter geführt wurde. Enthalten waren Positionen, Kontaktdaten und je ein (floatendes) Bild pro Person. Das alles auf einer Seite war für den Kunden nicht angenehm zu editieren. Da das Blog bisher nicht genutzt worden war, hatte sie die Idee, pro Mitarbeiter einen Beitrag anzulegen und der Kategorie «team» zuzuordnen. Der Name war der Beitragstitel, und die Sortierung sollte alphabetisch erfolgen. Die Herausfordung daran war, dass eine Sortierung per Nachname gewünscht war, der aber im Beitragstitel zuletzt kam.
Unsere Umsetzung bestand darin, aus dem Beitragstitel via explode
(an Leerzeichen) ein Array zu generieren, von diesem mit end
den letzten Wert zu extrahieren und automatisch in einem Custom Field zu speichern. Dieses wählten wir dann als Sortierkriterium aus.
Nachfolgende Funktion befüllt das Custom Field, sortmeta
(sofern dieses leer ist, um ggf. auch eine manuelle Kontrolle über die Sortierung zuzulassen).
function pptf_add_field_tosort ( $post_id ) {
$title = get_the_title( $post_id );
$pieces = explode(' ',$title);
$field = end($pieces);
$post_meta = get_post_meta( $post_id, 'sortmeta', true );
if ( empty( $post_meta ) ) update_post_meta( $post_id, 'sortmeta', $field );
}
add_action( 'save_post', 'pptf_add_field_tosort', 100, 2);
Das Feld wird übrigens auch dann befüllt, wenn man in der Übersichtsliste der Beiträge die Stapelverarbeitung für Bearbeiten
aktiviert, und einfach alle Posts (neu) speichert.
Hier wird abgefragt, ob wir uns in der Kategorie team
befinden, und wenn ja, der Query modfiziert und die Sortierung über das benutzerdefinierte Feld angewendet.
function pptf_loop_the_cat($query) {
if ( is_admin() || !$query->is_main_query() )
return;
if ( $query->is_category('team') ) {
$queried_object = $query->get_queried_object();
$term = $queried_object->term_id;
$query->set( 'posts_per_page', -1 );
$query->set( 'cat', $term );
$query->set( 'meta_key', 'sortmeta' );
$query->set( 'orderby', 'meta_value' );
$query->set( 'order', 'ASC' );
}
}
add_action( 'pre_get_posts', 'pptf_loop_the_cat' );
Schreibe einen Kommentar