Estoy escribiendo un plugin de Wordpress MU, incluye un enlace con cada publicación y quiero usar ajax para llamar a una de las funciones de complemento cuando el usuario hace clic en este enlace, y luego actualizar dinámicamente el texto de enlace con salida de esa función.Wordpress: cómo llamar a una función de complemento con una llamada ajax?
Estoy atascado con la consulta de AJAX. Tengo esta forma complicada, claramente hack-ish, de hacerlo, pero no está funcionando del todo. ¿Cuál es la forma 'correcta' o 'wordpress' de incluir la funcionalidad ajax en un complemento?
(Mi código de corte actual está por debajo. Al hacer clic en el enlace no consigo el mismo resultado que me meto en la página wp como cuando voy directamente a la muestra-ajax.php en mi navegador generan.)
Tengo mi código [1] establecido de la siguiente manera:
mu-plugins/sample.php:
<?php
/*
Plugin Name: Sample Plugin
*/
if (!class_exists("SamplePlugin")) {
class SamplePlugin {
function SamplePlugin() {}
function addHeaderCode() {
echo '<link type="text/css" rel="stylesheet" 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/muestra/muestra-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/muestra/muestra-ajax.php:
<?php
if (!function_exists('add_action')) {
require_once("../../../wp-config.php");
}
if (isset($sample_plugin)) {
$sample_plugin->doAjax();
} else {
echo "unset";
}
?>
[1] Nota: El siguiente tutorial me consiguió este momento, pero estoy perplejo en este punto. http://www.devlounge.net/articles/using-ajax-with-your-wordpress-plugin
me olvidó añadir que el administrador-ajax.php se encarga de cargar todo el entorno de WordPress, por lo que no debe preocuparse por incluir ningún archivo en su complemento. –
Su respuesta original fue excelente. Gracias por mostrarme la forma correcta de hacer ajax en wp. Tu explicación deja en claro lo que he visto en otro código que he leído. Nota: También tuve un error de alcance javascript que he corregido anteriormente en la cuestión, por lo que podría ser una pregunta de referencia wp más útil que una pregunta 'arreglar mi error tonto específica'.(hacía referencia a 'esto' dentro del éxito fn para la llamada ajax). – Bee
John P está totalmente equivocado, me disculpo, mi solución es ** no ** la única manera, pero es un método que me resulta fácil para AJAX rápido, sin tener que cargar WordPress yo mismo. – TheDeadMedic