web-dev-qa-db-fra.com

Vingt quinze: Articles adjacents par menu_order

J'utilise le thème Twenty Fifteen (enfant) et je souhaite afficher les liens de publication précédents/suivants avec l'image d'arrière-plan de mon type de publication personnalisé hiérarchique.

Il est affiché, malheureusement, la commande semble complètement fausse. Je suppose que c’est parce que les articles sont sélectionnés par date et non par ordre de menu?

Je veux que le prochain/post précédent soit comme je les ai commandés dans le backend et le menu, et il devrait être affiché indépendamment du fait que ce soit un parent, un enfant ou un frère du post actuel.

Le code pour cela est dans le single.php:

the_post_navigation( array(
    'next_text' => '<span class="meta-nav" aria-hidden="true">' . __( 'Next', 'twentyfifteen' ) . '</span> ' .
        '<span class="screen-reader-text">' . __( 'Next post:', 'twentyfifteen' ) . '</span> ' .
        '<span class="post-title">%title</span>',
    'prev_text' => '<span class="meta-nav" aria-hidden="true">' . __( 'Previous', 'twentyfifteen' ) . '</span> ' .
        '<span class="screen-reader-text">' . __( 'Previous post:', 'twentyfifteen' ) . '</span> ' .
        '<span class="post-title">%title</span>',
) );

Comment puis-je obtenir les messages dans le bon ordre?

1
Thomas

MODIFIER

Selon le PO, cette question/réponses a résolu le problème

RÉPONSE ORIGINALE

the_post_navigation() , jusqu'au plus profond de lui, utilise get_adjacent_post() pour retourner et affiche le message suivant et le message précédent sur le message actuellement affiché.

Par défaut, ces publications adjacentes sont renvoyées par date de publication. Nous pouvons modifier cela en filtrant la clause ORDERBY pertinente de la requête SQL. Ce filtre que nous allons utiliser est le filtre get_{$adjacent}_post_sort où la partie dynamique {$adjacent} fait référence au lien next ou previous.

Voici à quoi ressemble le filtre:

apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1", $post );

Donc, dans un plugin personnalisé ou le fichier de fonction de votre thème, nous pouvons faire ce qui suit: ( NOTE: Ceci est non testé, et nous ajouterons notre filtre uniquement lorsqu'un certain type de message est affiché )

add_filter( 'get_next_post_sort',     'wpse_220361_adjacent_post_sort', 11, 2 );
add_filter( 'get_previous_post_sort', 'wpse_220361_adjacent_post_sort', 11, 2 );
function wpse_220361_adjacent_post_sort ( $orderby, $post )
{
    // Make sure we are on our desired post type
    if ( 'MY_CUSTOM_POST_TYPE_SLUG' !== $post->post_type )
        return $orderby;

    // We are on the desired post type, lets alter the SQL
    $orderby = str_replace( 'post_date', 'menu_order', $orderby );

    return $orderby;
}
2
Pieter Goosen