WordPress: previous/next_post_link() korrigieren wenn nach menu_order sortiert wird
Korrektur des WordPress-Bugs, dass der <code>previous/next_post_link()</code> falsch ist, wenn nach <code>menu_order</code> 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.
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' );