2010-11-02 10 views
1

Dans mon plugin wordpress, j'ai besoin d'une option JSON pour charger, à l'aide de jquery, des informations sur un type de message personnalisé. Cet appel jquery viendra dans une page où tous les utilisateurs devraient le voir.Appel de la fonction json dans wordpress

pour autant que je comprends du codex je devrais avoir une fonction:

function my_json_returning_function(){ 
    // get json objects here 
    echo $json; 
    die(); 
} 

Outre les actions:

add_action('wp_ajax_my_json_action', 'my_json_returning_function'); 
add_action('wp_ajax_nopriv_my_json_action', 'my_json_returning_function'); 

Dans mon fichier plug-in.

alors quelque chose comme:

jQuery(document).ready(function($) { 
    var data = { 
     action: 'my_json_action', 
    }; 

    // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php 
    jQuery.post(<?php echo admin_url('admin-ajax.php');?>, data, function(response) { 
     alert('Got this from the server: ' + response); 
    }); 
}); 

doit appeler la fonction en question. Ma vraie question est où je devrais placer toutes les différentes parties - et si quelque chose manque.

La fonction php et les actions hooks vont dans le fichier plugin. Mais le javascript, je suis plus confus. Je veux le mettre dans le fichier javascript plugin, mais puisque je dois aller chercher l'URL d'administration en utilisant php qui devient un problème.

Comment puis-je m'assurer que le script n'est appelé que si dans une certaine page? Y a-t-il plus de crochets et de filtres avec lesquels je devrais être à l'aise? Ou est-il possible de le charger en utilisant wp_enqueue_script lors de l'exécution d'un shortcode sur cette page, ou est-ce trop tard, car il me semble qu'il doit être chargé dans l'en-tête.

Beaucoup de questions, mais j'espère que vous comprenez la base de mon problème - j'ai du mal à placer le code aux bons endroits dans la structure wordpress.

EDIT: Appel echo admin_url ('admin-ajax.php'); n'est pas, au moins à mes yeux, la manière la plus élégante de le faire. Je préfère avoir une API json, avec son URL séparée, et l'appeler dans l'appel ajax. Comment pourrais-je configurer une page dans wordpress qui ne renvoie qu'un objet json?

+0

Cette question [a été répondu sur le WordPress Stack Exchange] (http://wordpress.stackexchange.com/questions/3610/comment gérer-ajax-appelle-et-json-dans-wordpress). L'astuce est que vous pouvez utiliser 'wp_localize_script()' pour envoyer des valeurs de configuration PHP à Javascript. –

Répondre

1

Ce que vous avez ci-dessus est partiellement correct.

lorsque vous utilisez l'appel à admin-ajax.php, vous avez dans les commentaires de la page codex est wordpress

// since 2.8 ajaxurl is always defined in the admin header 
// and points to admin-ajax.php 

c'est juste ... utiliser la variable javascript 'ajaxurl' en lieu de l'appel php ..

il serait donc ressembler à ceci

jQuery(document).ready(function($) { 
var data = { 
    action: 'my_json_action', 
}; 

    // since 2.8 ajaxurl 
    jQuery.post(ajaxurl, data, function(response) { 
    alert('Got this from the server: ' + response); 
    }); 
}); 

qui devrait être vous .. juste placer toutes vos fonctions dans votre fichier plugin principal. lorsque wordpress charge, il va produire une variable appelée ajaxurl que vous pouvez ensuite utiliser dans vos scripts .. :)

+0

Oui, mais comme je l'ai compris, il ne serait valide que sur une page d'administration, et ceci est censé être sur une page régulière pour tout le monde à voir.Donc l'ajaxurl ne serait pas défini. Mais, par curiosité, où placeriez-vous la fonction jquery dans votre exemple? – niklasdstrom

+0

bien dans ce cas si c'était un plugin que je créais je placerais ceci dans la page principale du php .php, comme je le ferais normalement pour créer un nouveau fichier php dans ma structure de dossier de plugin, nommé wp-jquery. php dans ce fichier serait mon appel aux hooks add_action c'est-à-dire: wp_ajax_MYFUNCTION aussi en utilisant le wp_ajax_nopriv_MYFUNCTION qui permet l'appel au fichier alors que sur le front end, alors à l'intérieur de ma page plugin principale .php j'inclurais ce fichier. ie: include ('inc/wp-jquery.php'); poster ici qui pourrait aider http://geekpreneur.blogspot.com/2009/06/how-to-use-wpajax-in-wordpress.html – Marty