web-dev-qa-db-fra.com

comment vérifier si un shortcode est utilisé plus d'une fois dans le même message

J'ai écrit un plugin de shortcode. Fondamentalement, le plugin a la structure suivante:

PL::setup();

class PL {

public static function setup() {
add_shortcode("myshortcode", array ( __CLASS__,"myshortcode_handler"));
}

public static function myshortcode_handler(
... some variable assignment?
   if (time the shortcode is invoked == 1) {
      ... 
   }
   else {
      ...
   }
... some other code lines
}

}

J'ai besoin de distinguer le cas où le shortcode est invoqué pour la première fois ou non. Je pense que je dois déclarer une variable, mais je ne sais pas comment et où je dois la déclarer.

1
Toc

Je votre callcode shortfon myshortcode_handler() utilise une variable statique:

function myshortcode_handler()
{
    static $first_call = TRUE;

    if ( ! $first_call )
    {
        # callback was called earlier …
    }

    # set it to FALSE after you have handled the condition.
    $first_call = FALSE;

    return;
}

Veuillez ne pas utiliser abusivement l'espace de noms global pour cela: évitez les constantes, les variables globales et les solutions de contournement similaires qui pourraient conduire à des conflits inattendus.

0
fuxia

Il y a un certain nombre de façons de le faire. L'une de ces méthodes consiste à définir une constante la première fois que votre rappel est exécuté.

if (!defined('myshortcode_check')) {
  // first time code
  define('myshortcode_check',true);
} else {
  // not the first time code
}

Devrait être assez simple. C'est un global, cependant, pas de post spécifique. Cela devrait fonctionner correctement pour les affichages à publication unique, mais il se peut que le comportement que vous souhaitez pour les index de publication ne soit pas celui souhaité. Si ce shortcode est exécuté sur n’importe quelle publication de l’index, la variable sera define.

http://php.net/manual/en/function.defined.php
http://php.net/manual/en/function.define.php

1
s_ha_dum