WordPress: comment appeler un plugin de fonctionner avec un appel ajax?
Je suis en train d'écrire un plugin WordPress MU, il inclut un lien avec chaque poste, et je veux utiliser ajax pour appeler l'un de l'plugin fonctionne lorsque l'utilisateur clique sur ce lien, puis mettre à jour dynamiquement le lien texte avec la sortie de la fonction.
Je suis coincé avec la requête ajax. J'ai eu cette compliqué, clairement hack-ish, la façon de le faire, mais il n'est pas assez de travail. Quelle est la "bonne" ou "wordpress" de manière à inclure des fonctionnalités ajax dans un plugin?
(Mon hack code est ci-dessous. Lorsque je clique sur le lien générer je n'ai pas la même sortie que je reçois dans la page wp que quand je vais directement à sample-ajax.php dans mon navigateur.)
J'ai obtenu mon code[1] défini comme suit:
mu-plugins/sample.php:
<?php
/*
Plugin Name: Sample Plugin
*/
if (!class_exists("SamplePlugin")) {
class SamplePlugin {
function SamplePlugin() {}
function addHeaderCode() {
echo '<link type="text/css" href="'.get_bloginfo('wpurl').
'/wp-content/mu-plugins/sample/sample.css" />\n';
wp_enqueue_script('sample-ajax', get_bloginfo('wpurl') .
'/wp-content/mu-plugins/sample/sample-ajax.js.php',
array('jquery'), '1.0');
}
//adds the link to post content.
function addLink($content = '') {
$content .= "<span class='foobar clicked'><a href='#'>click</a></span>";
return $content;
}
function doAjax() { //
echo "<a href='#'>AJAX!</a>";
}
}
}
if (class_exists("SamplePlugin")) {
$sample_plugin = new SamplePlugin();
}
if (isset($sample_plugin)) {
add_action('wp_head',array(&$sample_plugin,'addHeaderCode'),1);
add_filter('the_content', array(&$sample_plugin, 'addLink'));
}
mu-plugins/sample/sample-ajax.js.php:
<?php
if (!function_exists('add_action')) {
require_once("../../../wp-config.php");
}
?>
jQuery(document).ready(function(){
jQuery(".foobar").bind("click", function() {
var aref = this;
jQuery(this).toggleClass('clicked');
jQuery.ajax({
url: "http://mysite/wp-content/mu-plugins/sample/sample-ajax.php",
success: function(value) {
jQuery(aref).html(value);
}
});
});
});
mu-plugins/sample/sample-ajax.php:
<?php
if (!function_exists('add_action')) {
require_once("../../../wp-config.php");
}
if (isset($sample_plugin)) {
$sample_plugin->doAjax();
} else {
echo "unset";
}
?>
[1] Note: Le tutoriel ci-dessous m'a fait beaucoup de chemin, mais je suis perplexe à ce point.
http://www.devlounge.net/articles/using-ajax-with-your-wordpress-plugin
OriginalL'auteur Bee | 2010-05-25
Vous devez vous connecter pour publier un commentaire.
TheDeadMedic n'est pas tout à fait droit. WordPress a construit en AJAX capacités. Envoyer votre requête ajax /wp-admin/admin-ajax.php à l'aide de POST avec l'argument de "l'action":
Puis de le brancher dans le plugin de ce genre si vous ne souhaitez que cela fonctionne pour les utilisateurs enregistrés:
ou l'accrocher comme cela fonctionne uniquement pour les non-utilisateurs enregistrés:
Utiliser à la fois si vous voulez que cela fonctionne pour tout le monde.
admin-ajax.php utilise des noms d'action déjà, alors assurez-vous de regarder à travers le fichier et ne pas utiliser les mêmes noms d'action, ou bien vous allez accidentellement essayer de faire des choses comme supprimer des commentaires, etc.
MODIFIER
Désolé, je n'ai pas très bien compris la question. Je pensais que vous étiez demandant comment faire une requête ajax. En tout cas, deux choses que je voudrais essayer:
D'abord, demandez à votre fonction echo juste le mot AJAX sans
a
tag. Ensuite, essayez de changer votre appel ajax, donc il a à la fois un succès et un rappel:L'original de votre réponse a été grande. Merci pour me montrer la bonne façon de faire de l'ajax dans wp. Votre explication est claire ce que j'ai vu dans un autre code que j'ai lu. Note: j'ai aussi eu un javascript de délimitation de l'étendue de l'erreur que j'ai corrigé ci-dessus dans la question, de sorte qu'il pourrait être plus utile wp de renvoi d'une question que d'un "corriger mon bug aussi con' question. (faisait référence à "ceci" à l'intérieur de la réussite fn pour l'appel ajax).
John P est mort, je ne m'en excuse, ma solution est pas le seul moyen, mais c'est une méthode que j'ai trouver facile, rapide AJAX, sans avoir à les charger WordPress moi-même.
J'ai oublié de mentionner dans Jean-P de la méthode, vous pouvez utiliser la variable JavaScript
ajaxurl
plutôt que de coder en dur l'URL (ou de la propriétéuserSettings.ajaxurl
dans la note WP 3.0).Où dois-je mettre de la fonction jQuery ?, dans quel fichier ?
OriginalL'auteur John P Bloch
WordPress environnement
Tout d'abord, afin de réaliser cette tâche, il est recommandé de s'inscrire puis de mise en file d'un script jQuery qui va faire la demande au serveur. Ces opérations sera accroché dans
wp_enqueue_scripts
action crochet. Dans le même crochet, vous devriez mettrewp_localize_script
qu'il est utilisé pour inclure Javascript arbitraire. De cette manière, il y aura un JS objet disponible en front-end. Cet objet porte sur l'url correcte pour être utilisé par le jQuery poignée.Veuillez jeter un oeil à:
Fichier: functions.php 1/2
Fichier: jquery.ajax.js
Ce fichier fait l'appel ajax.
Fichier: functions.php 2/2
Enfin sur votre functions.php fichier il doit y avoir la fonction déclenchée par votre appel ajax.
Rappelez-vous les suffixes:
Ces suffixes, plus l'action de composer le nom de votre action:
wp_ajax_myaction
ouwp_ajax_nopriv_myaction
Espère que cela aide!
Laissez-moi savoir si quelque chose n'est pas clair.
OriginalL'auteur rams0610
Il suffit d'ajouter une information.
Si vous souhaitez recevoir un objet à partir d'une classe php méthode de la fonction :
fichier js
fichier php
OriginalL'auteur J.BizMai