kulturbanause Blog

Responsive Design, WordPress, Konzeption, HTML, CSS, JS & UX/UI …

WordPress: previous/next_post_link() korrigieren wenn nach menu_order sortiert wird

WordPress verfügt über die Möglichkeit Inhalte auf der Website in der gleichen Reihenfolge anzuzeigen, in der sie im Backend sortiert wurden. Gebt ihr jedoch die Beiträge eines »Custom Post Types« aus, werdet ihr merken, dass die WordPress Pagination auf die falschen Beiträge verlinkt. Wir zeigen euch, wie ihr das Problem umgeht.

Workshops und Seminare von kulturbanause

Unsere Seminar-Termine für 2018 sind online!

Jetzt Tickets sichern!

WordPress-Pagination anpassen

Die Navigation von einem Beitrag zum nächsten bzw. zum vorherigen wird in WordPress mit der Funktion previous_post_link() bzw. mit next_post_link() realisiert. Wenn ihr jedoch anstelle der normalen Beiträge einen »Custom Post Type« anzeigt, und diesen mit Hilfe von menu_order im Frontend in der Reihefolge anzeigt, die der Anwender im Backend eingestellt hat, werdet ihr feststellen, dass der nächste/vorherige Beitrag anhand des Datums angezeigt wird. Das ist falsch.

Folgendes Snippet, eingefügt in die functions.php, löst das Problem:

function kb_custom_adjacent_post_where($sql) {
 if ( !is_main_query() || !is_singular() ) 
 return $sql; 
 $the_post = get_post( get_the_ID() ); 
 $patterns = array(); 
 $patterns[] = '/post_date/'; 
 $patterns[] = '/\'[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\'/'; 
 $replacements = array(); 
 $replacements[] = 'menu_order'; 
 $replacements[] = $the_post->menu_order; 
 return preg_replace( $patterns, 
 $replacements, $sql ); 
} 

add_filter( 'get_next_post_where', 'kb_custom_adjacent_post_where' ); 
add_filter( 'get_previous_post_where', 'kb_custom_adjacent_post_where' ); 

function kb_custom_adjacent_post_sort($sql) { 
 if ( !is_main_query() || !is_singular() ) 
 return $sql; 
 $pattern = '/post_date/'; $replacement = 'menu_order'; 
 return preg_replace( $pattern, $replacement, $sql ); 
} 

add_filter( 'get_next_post_sort', 'kb_custom_adjacent_post_sort' ); 
add_filter( 'get_previous_post_sort', 'kb_custom_adjacent_post_sort' );

Links/Quellen

Jetzt bist du gefragt!

Hast du Anregungen, Ergänzungen, einen Fehler gefunden oder ist dieser Beitrag nicht mehr aktuell? Dann freuen wir uns auf deinen Kommentar.

Du kannst diesen Beitrag natürlich auch weiterempfehlen. Wir sind dir für jede Unterstützung dankbar!

Unterstützung bei WordPress-Projekten

Unsere WordPress Agentur ist auf die Entwicklung maßgeschneiderter WordPress-Themes und -Websites spezialisiert. Wenn du Unterstützung bei der Planung, Gestaltung und Entwicklung eines Projekts benötigst, helfen wir gerne weiter.
WordPress-Leistungsangebot →

Das könnte dich auch interessieren

Kommentar verfassen

Dieser Blog lebt vom Feedback der Besucher! Also los, mach mit!
Bitte habe Verständnis dafür, dass Kommentare die mit dem Inhalt dieses Beitrags nichts zu tun haben, gelöscht werden.