Passer la variable PHP à javascript

13

Existe-t-il une possibilité de passer certaines variables PHP en javascript pour que je puisse les utiliser plus tard?

Seulement en single.php.
J'ai entendu parler wp_enqueue_scriptsmais avec cela, il est nécessaire de déclarer un chemin vers un fichier JS, mais je n'en ai pas besoin.

Sebastian Corneliu Vîrlan
la source
Qu'entendez-vous par plus tard , et où voulez-vous utiliser les variables (en ce qui concerne l'emplacement des variables PHP)? Vous pouvez bien sûr faire écho / imprimer du code JavaScript via PHP, et ainsi insérer des valeurs de variable PHP. Mais ce n'est pas ce que vous voulez, je suppose ...
tfrommen
J'ai créé une nouvelle table db avec des response.id`s de Facebook api. Voici le tableau: action_id, user_id, post_id, fb_id où fb_id est response.id à partir d'une action facebook. Puis dans single.php j'ai un bouton où si j'appuie je dois supprimer l'action fb avec api: FB.api ('/' + fb.response, 'delete'); où fb.response doit être fb_id de la table.
Sebastian Corneliu Vîrlan

Réponses:

18

Méthode des meilleures pratiques

Jetez un œil à wp_localize_scriptce qui est censé faire exactement cela.

Mais cela nécessite une utilisation préalable dewp_enqueue_scripts , vous devrez donc déplacer votre JS dans un fichier séparé.
Cela vaudra certainement ces quelques minutes d'effort.

function wpse_96370_scripts()
{
    if ( is_single() ) {

        wp_register_script(
           'your_script_handle',
           get_template_directory_uri() . '/js/your-script.js',
           array( /* dependencies*/ ),
           1.0,
           true
       );

       wp_enqueue_script( 'your-script-handle' );

       $script_params = array(
           /* examples */
           'post' => 99,
           'users' => array( 1, 20, 2049 )
       );

       wp_localize_script( 'your-script-handle', 'scriptParams', $script_params );

    }
}
add_action( 'wp_enqueue_scripts', 'wpse_96370_scripts' );

Dans le JS, vous pourrez alors utiliser les paramètres passés comme ceci:

var posts = scriptParams.post,
    secondUser = scriptParams.users[1]; /* index starts at 0 */

// iterate over users
for ( var i = 0; i < scriptParams.users.length; i++ ) {
    alert( scriptParams.users[i] );
}

[Modifier] Votre situation

Selon votre commentaire

J'ai créé une nouvelle table db avec quelques response.ids de Facebook api. Voici le tableau: action_id, user_id, post_id, fb_id où fb_id est response.id à partir d'une action facebook. Puis dans single.php j'ai un bouton où si j'appuie je dois supprimer l'action fb avec api: FB.api('/'+fb.response, 'delete');fb.responsedevrait être fb_idde la table.

Mettez le /js/dossier suivant de votre thème , créez-le, s'il n'existe pas.
Appelons le fichier fb-response.js:

jQuery( '#button_id' ).click( function() {
    FB.api( '/' + fbParams.id, 'delete' );
});

Ensuite, enregistrez-vous, mettez-vous en file d'attente et localisez comme indiqué ci-dessus. En supposant que vous ayez l'ID que vous souhaitez transmettre, disons $fb_id:

wp_register_script(
    'fb-response',
     get_template_directory_uri() . '/js/fb-response.js',
     array( 'jquery' ),
     1.0,
     true
);

wp_enqueue_script( 'fb-response' );

wp_localize_script( 'fb-response', 'fbParams', array( 'id' => $fb_id ) );

NB Évidemment, ce qui précède suppose que c'est dans un thème. Si nous parlons de "plugin", modifiez les emplacements en conséquence.

Johannes Pille
la source
Je suis un peu débutant dans ce domaine, donc j'essaie de l'implémenter sur mon wordpress: papermashup.com/jquery-iphone-style-ajax-switch . Comme vous pouvez le voir, il y a un fichier js et quelques lignes de code js à mettre dans le fichier d'utilisation. Ou je peux mettre ces quelques lignes de code sur un autre fichier?
Sebastian Corneliu Vîrlan
Donc, pour toute petite action javascript, je dois créer un fichier? Si vous êtes disponible, pouvez-vous ajouter sur skype: sebyku17?
Sebastian Corneliu Vîrlan
Cela dépend de ce que vous voulez faire, de l'endroit où vous voulez le faire, etc. Généralement: non, vous n'avez pas besoin d'utiliser un fichier JS externe. Mais si vous le souhaitez, vous pouvez mettre ce que vous voulez dans un seul fichier . Il n'y a pas besoin de plusieurs fichiers si vous avez plusieurs fonctions, si c'est ce que vous demandiez. Cependant, vous avez déjà accepté cette réponse ( à mon humble avis assez complexe et dans votre cas un peu exagéré ) - sans avoir bien compris, si je comprends bien. Aucune infraction, @Johannes. ;)
tfrommen
1
Aucune prise, @tf. Jusqu'à présent, cela pourrait être excessif à la limite, mais pour l'un, son code pourrait croître et pour un autre, la question initiale parlait de "variables", au pluriel. Votre réponse est tout aussi valable, alors +1 de moi.
Johannes Pille
2
wp_localize_script est une fonction très sous-utilisée et puissante pour passer des valeurs PHP à un fichier Javascript. Il est surprenant que peu de gens connaissent réellement cette puissante fonctionnalité de Wordpress.
Dwayne Charrington
1

Après avoir lu votre commentaire, je comprends que vous aimeriez faire quelque chose comme ceci:

// Do something to get the ID
$facebook_id = ...

// Create and print the button
echo '<input onclick="FB.api('/'+'.$facebook_id.', 'delete')" />';
tfrommen
la source
Non, c'est la page où je travaille: funny-videoro.com/the-dark-knight-rises-trailer-oficial . Si vous le souhaitez, vous pouvez vous connecter au site Web. Ensuite, vous verrez un bouton de style jquery ios. Lorsque je glisse sur off, je dois supprimer avec fb api un message. L'identifiant du message est dans la base de données.
Sebastian Corneliu Vîrlan
Eh bien, c'est essentiellement ce que j'ai écrit dans ma réponse. Récupérez l'id de la base de données et stockez-le dans une variable. Ensuite, imprimez-le directement dans votre appel de fonction JavaScript d'une ligne. Le <input ... />et sa fonction était uniquement à des fins de démonstration. Pour autant que je vous ai compris, tout indique ce dont vous avez besoin. Sinon, essayez d'expliquer un peu plus, mais dans votre question, pas dans les commentaires.
tfrommen
Je ne veux pas utiliser le code php et js dans la même ligne, dans wordpress certaines fonctions sont automatiquement ...
Sebastian Corneliu Vîrlan