Sortierreihenfolge von Topics in bbPress anpassen

strich

bbpress
Aufgabe:
In einem Forum (WordPress, Buddypress, bbPress) die geschlossenen Topics (Themen) unterhalb der geöffneten Topics anzeigen.

Lösung:
bbPress nutzt die WordPress- Klasse WP_Query( $args ). Möchte man die Sortierung seiner Topics anpassen, bietet diese Klasse die Parameter ‘order’ und ‘orderby’.
Mit dem Parameter ‘order’ setzt man lediglich fest, wie sortiert werden soll:

  • ‘ASC’ – aufsteigend
  • ‘DESC’ – absteigend (default)

Mit dem Parameter ‘orderby’ setzt man fest, wonach sortiert soll:

  • ‘none’ – keine Sortierung
  • ‘ID’ – Sortierung nach Post ID
  • ‘author’ – Sortierung nach Autor
  • ‘title’ – Sortierung nach Titel
  • ‘name’ – Sortierung nach Post Name (post slug)
  • ‘date’ – Sortierung nach Datum
  • ‘modified’ – Sortierung nach last modified date
  • ‘parent’ – Sortierung nach Post/Page Parent ID
  • ‘rand’ – zufällige Sortierung
  • ‘comment_count’ – Sortierung nach Anzahl der Kommentare
  • ‘meta_value’ – nach einem selbst definierten meta_key (alphanumerisch)
  • ‘meta_value_num’ – nach einem selbst definierten meta_key (numerisch)

Interessant ist hier für uns ‘meta_value’.
Wir legen für jedes Topic den ‘meta_key’ ‘mmp_topic_order’ an und füllen ihn mit unserem Sortierkriterium.
Ich unserem Fall sind das ‘post_type’, ‘post_status’ und ‘post_date’. Die Funktion wird aufgerufen, wenn ein Post gespeichert wird.
function mmp_topic_order_save_post($post_id){
$post = get_post( $post_id );
$mmp_topic_order_date = $post->post_date;
if ( $post -> post_type == 'reply' ) {
$post_id = $post -> post_parent;
$post = get_post( $post_id );
}
//$mmp_topic_order_date = $post -> post_date;
if ( $post -> post_type == 'topic' ) {
if ( $post -> post_status == 'closed') {
$mmp_topic_order_date = get_post_meta( $post -> ID, '_bbp_last_active_time', true );
}
$mmp_topic_order_value = $post -> post_type.'_'.$post -> post_status.'_'.$mmp_topic_order_date;
update_post_meta($post -> ID, 'mmp_topic_order', $mmp_topic_order_value);
}
}
add_action( 'save_post', 'mmp_topic_order_save_post' );

Jetzt müssen wir nur noch beim Aufruf von ‘bbp_has_topics’ – i.d.R. in der Datei content-single-forum.php, die Information mitgeben, wonach sortiert werden soll:
bbp_has_topics( array( 'meta_key' => 'mmp_topic_order' ) )

Die Topics sollten nun im Forum richtig sortiert sein!

Falls das Forum schon einige Zeit besteht, existieren natürlich Topics ohne den ‘meta_key’.
Für diese Topics greift die neue Sortierung natürlich nicht.
Hier hilft ein MySQL-Update:
delete from wp_postmeta where meta_key = 'mmp_topic_order';
insert ignore into wp_postmeta (post_id, meta_key, meta_value) select post_id, 'mmp_topic_order', meta_value from wp_postmeta where meta_key = '_bbp_last_active_time';
update wp_postmeta m, wp_posts p set m.meta_value = concat(p.post_type,'_',p.post_status,'_',m.meta_value) where m.meta_key = 'mmp_topic_order' and p.id = m.post_id;

Viel Spaß!

Übrigens: Ich habe diese Anleitung nach dem besten Wissen und Gewissen geschrieben. Trotzdem übernehme ich natürlich keine Haftung für evtl. Folgen, wenn Ihr diesen Code anwendet. Ihr handelt auf eigene Gefahr ;-)

Website hundertprozent CO2 neutral mit Host Europestrich
strich



Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Login
LETZTE KOMMENTARE