web-dev-qa-db-fra.com

Comment traiter des arguments égaux et similaires pour une fonction?

Je suis en train d'étendre mon plugin de pagination, après un conseil de @toscho. Donc, le plugin utilisera maintenant les mêmes filtres, crochets et arguments que les fonctions de pagination wordpress natives.

Mon problème est que les différentes fonctions wp nomment leurs arguments ... différents.

Exemple:

Voici comment modifier le texte du lien "Suivant".

  • wp_link_page() = 'nextpagelink'
  • paginate_links() = 'next_text'

Après avoir récupéré l’entrée dans la classe, je wp_parse_args( $args, $this->defaults ); mes arguments puis extract eux.

Problème:

Quand j'autorise maintenant les deux arguments 'nextpagelink' & 'next_text' en tant qu'arguments valides, comment pourrais-je les traiter? Lequel voudrais-je vérifier en premier? Dois-je définir une priorité, de sorte que l'un remplace (si les deux sont définis) l'autre?

Exemple:

Cet exemple montre mes dilemmes:

  • Lequel a la plus haute priorité? Comment puis-je éviter de décider?
  • C'est un code vraiment long pour décider quoi faire avec 2 vars.

Code:

if ( $nextpagelink && $next_text ) 
{
    // CASE 1: both are set
    // which one should I take now?
}
elseif ( $nextpagelink )
{
    // CASE 2: only one is set - should this one override the next one?
    // set something
}
elseif ( $next_text )
{
    // CASE 3: only one is set - should this be overridden by the previous one?
    // set
}
else
{
    // CASE 4: none is set - apply default
    // set default
}
1
kaiser

wp_link_pages() et paginate_links() fonctionnent dans des contextes différents: le premier sur une seule page paginée, le dernier sur une archive. Donc is_archive() devrait être votre critère pour décider quel texte vous utiliserez, ou mieux: quel filtre vous utiliserez dans apply_filters().

2
fuxia

Étant donné que les deux doivent exister pour entrer dans la première déclaration if, ne pourriez-vous pas faire quelque chose comme ça?

if ( $nextpagelink && $next_text ) {
   // set both variables
}else {
   // set default
}

ou si vous ne voulez travailler qu'avec l'un d'entre eux, que l'autre existe ou non, vous pouvez le faire:

if ( $nextpagelink || $next_text ) {
   if ( $nextpagelink ) {
       // set something
   }

   if ( $next_text ) {
       // set
   }
}else {
   // set default
}
1
supajb