web-dev-qa-db-fra.com

Énumération des attributs de shortcode en JavaScript

Je travaille sur un plugin qui utilise un shortcode pour appeler une fonction JQuery. Trois aspects sont nécessaires pour fonctionner:

  1. Le code JQuery + son propre code, à inclure dans les pages sur lesquelles il sera utilisé
  2. L'élément HTML sur lequel il travaillera nécessite un attribut "id", afin de le référencer
  3. Une référence/initialisation dans un bloc $(document).ready(function())

J'ai déjà implémenté 1 et 2; 1 en utilisant wp_register_script et, si le code court apparaît, wp_print_scripts pour l’imprimer; et 2 en faisant de "id" un attribut de mon shortcode, qui est également renvoyé, par exemple. [myshortcode id="foo"] renvoie id="foo".

Le problème est 3. L'initialisation est de la forme:

$(document).ready(function() 
    { 
        $("#id").func( {attributes} ); 
     } 
 );

J'ai envisagé d'utiliser wp_localize_script sur une variable pour l'ID; Cependant, je ne sais pas combien de fois le shortcode apparaîtra sur une page donnée, et il semble insuffisant d'enregistrer un nombre arbitraire de scripts sinon identiques et j'espère juste que le nombre ne sera pas dépassé.

On dirait que c'est probablement assez courant, mais je n'ai rien trouvé de similaire en cherchant. Des idées? Merci!

1
Jonathan

Pour le 2ème, je recommande d'utiliser la fonction php uniqid(), prend une partie du travail de l'utilisateur.

Pour la troisième, je pense que le meilleur moyen d'implémenter est de continuer à ajouter l'id après chaque appel de shortcode à une variable globale/statique dans un tableau, puis de raccorder une fonction à wp_footer qui lit cette variable pour obtenir tous les id et générer le javascript neccessary.

Pour le 1er, ajoutez ceci dans la fonction shortcode

STATIC $flag = false;
if(!$flag) {
    $flag = true;

    // include all your scripts that you want to include in the page only once
    // These statements will be executed once per page load
    // irrespective of how many times shortcode is called.
}
0
Mridul Aggarwal