Pourquoi avez-vous besoin d'un entier improbable en pagination?

17

La paginate_linksréférence de la fonction Codex a un exemple de code qui est republié partout sur le net.

Il a une section qui utilise une variable appelée $big = 999999999; // need an unlikely integer:

echo paginate_links( array(
    'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $wp_query->max_num_pages
) );

Et est utilisé str_replacedans la echo paginate_linksfonction.

Est-ce une forme d'encapsulation?

Jason Green
la source

Réponses:

16

Remarque get_pagenum_link( $big ): ceci créera une URL ( pas un lien) basée sur le nombre fourni dans le premier paramètre.

Cette fonction est utilisée pour obtenir le modèle de base de l'URL, et le nombre entier élevé est utilisé ici, car:

  1. Vous devez fournir un entier comme argument.
  2. L'URL résultante est filtrée apply_filters('get_pagenum_link', $result)et peut être modifiée par les plugins. Ce risque est légèrement plus élevé pour les nombres correspondant aux pages existantes, par exemple lorsqu'un plugin implémente des titres distincts pour les sous-pages.

Donc c'est juste une… sale convention, un signal à d'autres plugins: ne changez pas ça s'il vous plait! Je pense que ça PHP_INT_MAXaurait été mieux, mais toujours moche. Et je me demande combien de développeurs de plugins le savent .

Le numéro est ensuite remplacé par l'espace réservé nécessaire dans paginate_links().

Ce que vous voyez ici est une API incomplète . Essayez d'apprendre quelque chose de cet exemple - ne publiez pas d'API incomplètes, ou vos documents seront gênants. :)

fuxia
la source
Je suis d'accord que PHP_INT_MAX aurait été mieux IMO, mais cela m'aurait davantage dérouté à l'époque. J'aime beaucoup votre explication, elle confirme que je réfléchissais dans le bon sens. Je ne voulais tout simplement pas faire d'hypothèses.
Jason Green
Est-ce donc utilisé uniquement dans le cas d'un filtre get_pagenum_linkaffectant les numéros de page existants ? (car paginate_links()utilise get_pagenum_link()de toute façon par défaut). Cela me semble être un cas extrême, à moins que je manque quelque chose?
Cai
@Cai On dirait que ça a été un vrai problème une fois. Les bases de code maintenues pendant longtemps ont tendance à être remplies de solutions de contournement pour les cas marginaux.
fuxia
Il ne semble paginate_links() pas toujours utilisé get_pagenum_link()par défaut, donc je me demande si c'est une convention d'avant et si le `` nombre entier improbable '' est vraiment nécessaire (ou si la vraie solution de contournement l'était simplement get_pagenum_link())?
Cai