Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Pagination WordPress : un utilitaire simple (et pourquoi)

46

Lors de la création de modèles pour WordPress, vous avez généralement des fonctions de pagination qui proviennent de l’application elle-même.

Ceux-ci incluent des choses comme:

Et il y a quelques autres articles qui vous donnent une plus grande granularité autour des taxonomies telles que get_adjacent_post().

Je recommande de lire tous les liens ci-dessus, car ils sont utiles si vous créez un thème, travaillez avec des types de publication personnalisés ou recherchez simplement une compréhension plus approfondie de certaines des balises de modèle courantes.

Si, toutefois, vous cherchez un moyen simple d’écrire votre utilitaire de pagination WordPress (dont j’expliquerai momentanément la raison d’être), alors le reste de cet article couvrira exactement cela.

Pagination WordPress personnalisée

Premièrement, chaque fois que vous créez une application Web pour quelqu’un, il y a forcément des nuances dans lesquelles la fonctionnalité WordPress native peut ne pas fonctionner. Peut-être que cela ne fonctionne pas comme prévu, cela ne fonctionne pas comme prévu ou cela ne répond pas à vos besoins.

Quoi qu’il en soit, cela ne signifie pas que la pagination ne peut pas être conçue pour répondre à vos besoins. Après tout, le cœur de la pagination – en particulier en ce qui concerne la pagination à message unique – est essentiellement ceci :

À partir du message actuel, voyez si un message existe avant et voyez s’il existe un message après. Si l’un ou l’autre type de message existe, fournissez un lien vers celui-ci ; sinon, ne le faites pas.

À partir de là, nous pouvons déterminer que nous aurons besoin des fonctionnalités suivantes :

  1. un moyen de déterminer si une publication existe derrière la publication actuelle,
  2. un moyen de déterminer si une publication existe après la publication actuelle,
  3. un moyen de récupérer un message donné,
  4. un moyen d’obtenir le lien permanent pour le message donné.

Je travaille pour être très particulier dans la langue ci-dessus, cependant, car un message qui est "derrière" ou "après" un message donné peut ne pas avoir un ID qui est un moins que l’ID du message actuel.

C’est simplement le premier message qui est publié et qui peut être récupéré dans les deux sens, n’est-ce pas ?

Donc, dans cet esprit, cela signifie que nous aurons besoin de deux requêtes :

  • une requête pour récupérer le post derrière le post en cours,
  • une requête pour récupérer l’article après l’article en cours.

Pour cet exemple, je suppose que vous avez accès à l’ID du message actuel via la fonction get_the_ID().

Obtenir un message derrière le message actuel

Pour ce faire, nous devons créer une requête simple qui récupérera un article publié dans la base de données du type d’article spécifié, et qui est lié à la position de l’article actuel.

Nous pouvons le faire en limitant le jeu de résultats à un, en classant les résultats par ordre décroissant et en comparant la valeur de l’ID de publication :

<?php

global $wpdb;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "
        SELECT *
        FROM $wpdb->posts
        WHERE ID < (SELECT ID
            FROM $wpdb->posts
            WHERE ID = %d
            AND post_type = '%s'
            AND post_status = '%s'
            ORDER BY ID DESC) AND post_type = '%s'
        AND post_status = '%s'
        ORDER BY ID DESC
        LIMIT 1
        ",
        get_the_ID(),
        'acme-custom-post-type',
        'publish',
        'acme-custom-post-type',
        'publish') );

Cela renverra un tableau de résultats que nous verrons comment gérer dans un instant.

Obtenir le message après le message actuel

Pour le prochain post, nous écrivons une requête similaire. Mais à la place, nous recherchons la valeur suivante qui est plus grande et qui est en avance sur l’ID actuel :

<?php

global $wpdb;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "
        SELECT *
        FROM $wpdb->posts
        WHERE ID > (SELECT ID
            FROM $wpdb->posts
            WHERE ID = %d
            AND post_type = '%s'
            AND post_status = '%s'
            ORDER BY ID ASC) AND post_type = '%s'
        AND post_status = '%s'
        ORDER BY ID ASC
        LIMIT 1
        ",
        get_the_ID(),
        'acme-custom-post-type',
        'publish',
        'acme-custom-post-type',
        'publish') );

Nous avons maintenant besoin de quelques fonctions pour déterminer si des messages existent. Nous pouvons le faire avec le tableau de résultats renvoyé.

Vérifier si une publication existe

Notez que dans l’exemple suivant, la fonction accepte le tableau de résultats et retourne simplement s’il y a un article précédent. Les résultats transmis à cette fonction doivent provenir de la requête de publication précédente ci-dessus.

Deuxièmement, notez que c’est privé. Vous voudrez peut-être rendre le vôtre public en fonction de la façon dont vous souhaitez construire vos modèles.

<?php 
/**
 * @param array $results the results of the query to determined if there are past posts
 *
 * @return bool true if there is a previous post; otherwise, false
 */
private function hasPreviousPost($results)
{
    return isset($results[0]);
}

Et puis pour le post suivant, ça a la même apparence mais rappelez-vous que les résultats qui sont passés dans cette fonction proviennent d’une requête différente.

<?php
/**
 * @param array $results the results of the query to determined if there are future posts
 *
 * @return bool true if there is a next post; otherwise, false
 */
private function hasNextPost($results)
{
    return isset($results[0]);
}

Et enfin, nous pouvons utiliser ces fonctions conditionnelles pour obtenir le permalien.

Obtenir le lien

N’oubliez pas que la manière dont vous utilisez cette fonction peut varier de l’implémentation que j’ai fournie. Donc, si vous n’avez pas besoin qu’il soit privé, modifiez sa visibilité et utilisez-le dans votre modèle selon vos besoins.

<?php
/**
 * @param array $results the results of the array from which to retrieve the post ID
 *
 * @return string the ID of the post to which we're going to link
 */
private function getPostLink($results)
{
    return get_the_permalink($results[0]->ID);
}

Enfin, notez que cette fonction accepte les résultats que vous lui transmettez à partir de l’une ou l’autre des requêtes et récupère la propriété ID à partir du premier index des résultats.

En effet, les résultats sont limités à un et dépendent de votre utilisation des fonctions conditionnelles. Autrement dit, vous pouvez faire quelque chose comme:

  • s’il y a un prochain article, obtenez le lien du prochain article

Mais votre implémentation peut varier.

Pourquoi est-ce nécessaire ?

Ce n’est peut-être pas nécessaire. C’est tout: si vous utilisez WordPress prêt à l’emploi avec très peu de personnalisation ou d’extension et que vous n’avez rien à faire au-delà de ce qu’il peut fournir, vous n’en aurez peut-être pas besoin.

Si, d’un autre côté, vous cherchez un moyen d’introduire la fonctionnalité de pagination WordPress sur un seul article, alors c’est une façon de le faire qui peut gérer correctement le cas des articles qui sont d’un type d’article spécifique mais ne le font pas. t ont des identifiants séquentiels (et qui ne fonctionnent qu’avec un statut de publication).

Source d’enregistrement: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More