web-dev-qa-db-fra.com

Pourquoi get_next_post_link () ou get_previous_post_link () ne renvoie pas les liens requis?

C'est dans Wordpress, Divi. Cela me semblait une tâche simple, mais je n’ai pas réussi à obtenir le résultat voulu en passant des heures à coder et à tester. Actuellement, je travaille sur un site Web, où il y a des articles, et j'ai l'intention de donner à l'utilisateur la possibilité de passer aux articles adjacents avec un simple lien pointant vers eux. J'ai essayé de les mettre dans functions.php, puis dans single.php mais le même résultat ... Rien. Je l'ai vérifié via Wordpress debug.log, cela montre que les fonctions ne renvoient aucune valeur. Notez que je mentionne debug.log, car j’ai transféré les sorties là-bas.

add_filter( 'the_content', 'post_navigation', 10, 2 );
function post_navigation($content) {
    $post = get_post();
    $post_type = get_post_type( $post );

    if ( $post_type == 'post' ) {
        $next_p = get_previous_posts_link();
        $content = $content . $next_p;

        return $content;
    } else {
        return $content;    
    }

}

Il n'a pas de sortie correctement formatée, mais je voulais d'abord obtenir un résultat. Remarque: debug.log indique que le hook the_content a été appelé 2 fois lors d'une publication simple affichant la seconde fois avec le contenu:

You are being timed-out out due to inactivity. Please choose to stay signed in or to logoff.</p>
<p>Otherwise, you will be logged off automatically.</p>

Toute aide serait hautement appréciée!

4
Geeocode

Warning Edit : La réponse de Mark Kaplun fait ressortir un très bon point - cela modifiera votre contenu de manière inattendue. Disons, par exemple, que vous avez une autre application qui lit ce contenu de publication à partir de l'API WordPress - ce contenu comportera également ces liens, ce qui n'est probablement pas ce que vous voulez. Vous devriez vraiment appliquer ces méthodes dans votre theme templates au lieu d’ajouter ces informations au contenu lui-même. Vous pouvez éventuellement utiliser des contrôles de cohérence, tels que la comparaison avec la variable global $pagenow, ou d'autres méthodes, pour vous assurer de ne procéder à cette opération que lorsque vous consultez une publication au front-end.

Il semble que vous utilisiez des méthodes incorrectes. WordPress est parfois un peu délicat, et dans ce cas, vous voulez utiliser get_previous_post_link au lieu de get_previous_posts_link ( note : la différence est que dans la méthode que vous appelez, posts est pluriel - dans la méthode de votre choix, post est singulier).

Alors donnez-leur un coup de feu

  • get_previous_post_link - récupère le lien précédent qui est adjacent à la publication actuelle.
  • get_next_post_link - récupère le lien de publication suivant qui est adjacent à la publication en cours.

EDIT: Voici un exemple mis à jour basé sur votre code

add_filter( 'the_content', 'post_navigation', 10, 2 );

function post_navigation($content) {
    $post = get_post();

    if ( 'post' === $post->post_type ) {
        $next_p  = get_next_post_link();
        $prev_p  = get_previous_post_link();
        $content = "{$content}<br/>{$prev_p} | {$next_p}";
    }

    return $content;    
}
4
phatskat

Juste ne le fais pas. Le filtre the_content est censé modifier automatiquement le contenu, alors que vous essayez d'ajouter une décoration, pas un contenu. Vous allez avoir mal de façon très inattendue en fonction de l'emplacement exact du filtre et de la qualité de son élimination après l'utilisation prévue. (par exemple, placez-le dans une portée globale et vos extraits pourraient obtenir les liens)

Si vous devez manipuler le contenu affiché en y ajoutant une décoration, faites-le dans le thème, sans autre endroit.

3
Mark Kaplun