web-dev-qa-db-fra.com

Meilleure approche pour récupérer des données depuis les options wp vers un fichier js ou php

Je crée mon tout premier plugin, car je ne suis pas un programmeur, j'ai suivi des tutoriels et lu le codex, etc.

Mon plugin consiste à montrer un avis aux utilisateurs lorsque certaines conditions sont remplies. Je l'ai écrit dans jQuery et je l'ai placé dans un fichier js qui est mis en file d'attente par le plugin avec des styles.

J'ai suivi un tutoriel qui annonce simplement une page de paramètres et un formulaire avec une simple zone de texte pour enregistrer les données dans la table des options wp. J'ai testé et cela a fonctionné.

Comment puis-je maintenant transférer les données des options wp vers mon fichier js, la ligne où la notification est affichée est;

jQuery('.notice_container').wrap(<'div id="custom_notice"><span>Hello World....</span></div>')

Merci pour votre temps.

1
David Garcia

En supposant que vous n'utilisez pas AJAX pour la soumission du formulaire, vous pouvez utiliser wp_localize_script() . Voici une version simplifiée:

Dans votre fichier plugin:

function wpse105919_add_scripts(){
  wp_enqueue_script( 'myjs', plugins_url( '/myjs.js', __FILE__ ) );
  wp_localize_script( 'myjs', 'jsLocalizedObject', 'hello world');
}
add_action('wp_enqueue_scripts', 'wpse105919_add_scripts');

contenu du fichier myjs.js:

alert( jsLocalizedObject );

wp_localize_script() ajoutera une variable globale appelée jsLocalizedObject au <head> de votre document. Si vous affichez la source de votre page, vous verrez quelque chose comme:

<script type='text/javascript'>
/* <![CDATA[ */
var jsLocalizedObject = "hello world";
/* ]]> */
</script>

Pour obtenir une valeur de votre table wp_options, vous pouvez utiliser get_option() , puis transmettre le résultat au lieu de hello world dans la fonction wp_localize_script.

Votre code ressemblerait alors à:

function wpse105919_add_scripts(){
  wp_enqueue_script( 'myjs', plugins_url( '/myjs.js', __FILE__ ) );
  $myoption = get_option('option_name', 'default_value');
  wp_localize_script( 'myjs', 'jsLocalizedObject', $myoption);
}
add_action('wp_enqueue_scripts', 'wpse105919_add_scripts');

et votre partie jQuery:

jQuery('.notice_container').wrap(<'div id="custom_notice"><span>' + jsLocalizedObject + '</span></div>')

Notez que vous devez utiliser admin_enqueue_script à la place si votre JS doit être chargé dans le tableau de bord.

1
RRikesh