Wordpress: как вызвать сменную функцию с вызовом ajax?

Я пишу плагин MU Wordpress, он включает ссылку с каждым сообщением, и я хочу использовать ajax для вызова одной из сменных функций, когда пользователь нажимает на эту ссылку, и затем динамично обновите текст ссылки с выводом от той функции.

Я застреваю с запросом ajax. Я имею, это усложнило, ясно выход взлома, способ сделать это, но это является не совсем рабочим. Каковы 'корректный' путь или 'Wordpress' способ включать ajax функциональность в плагин?

(Мой текущий код взлома ниже. Когда я нажимаю на генерировать ссылку, я не получаю тот же вывод, я вхожу в wp страницу как тогда, когда я перехожу непосредственно к образцу-ajax.php в своем браузере.)

У меня есть свой код [1] настроенный следующим образом:

mu-plugins/sample.php:

\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 .= "click";
        return $content;
    }
    function doAjax() { //
        echo "AJAX!";
    } 
  }
}
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:


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:

doAjax();
} else {
  echo "unset";
}
?>

[1] Примечание: следующее учебное руководство получило меня настолько далеко, но я озадачен в этой точке. http://www.devlounge.net/articles/using-ajax-with-your-wordpress-plugin

13
задан Bee 26 May 2010 в 14:42
поделиться

1 ответ

TheDeadMedic не совсем прав. WordPress имеет встроенные возможности AJAX. Отправьте свой запрос ajax на /wp-admin/admin-ajax.php, используя POST с аргументом «действие»:

jQuery(document).ready(function(){
    jQuery(".foobar").bind("click", function() {
        jQuery(this).toggleClass('clicked');
        jQuery.ajax({
          type:'POST',
          data:{action:'my_unique_action'},
          url: "http://mysite/wp-admin/admin-ajax.php",
          success: function(value) {
            jQuery(this).html(value);
          }
        });
    });
});

Затем подключите его к плагину следующим образом, если вы хотите, чтобы он работал только для зарегистрированных пользователей:

add_action('wp_ajax_my_unique_action',array($sample_plugin,'doAjax'));

или подключите его так, чтобы он работал только для незарегистрированных пользователей:

add_action('wp_ajax_nopriv_my_unique_action',array($sample_plugin,'doAjax'));

Используйте оба, если хотите, чтобы он работал для всех.

admin-ajax.php уже использует некоторые имена действий, поэтому убедитесь, что вы просматриваете файл и не используете те же имена действий, иначе вы случайно попытаетесь сделать что-то вроде удаления комментариев и т. Д.

РЕДАКТИРОВАТЬ

Извините, я не совсем понял вопрос. Я думал, вы спрашиваете, как выполнить запрос ajax. В любом случае, я бы попробовал две вещи:

Во-первых, пусть ваша функция выводит только слово AJAX без тега a . Затем попробуйте изменить свой вызов ajax так, чтобы он имел как успешный, так и полный обратный вызов:

jQuery(document).ready(function(){
    jQuery(".foobar").bind("click", function() {
        var val = '';
        jQuery(this).toggleClass('clicked');
        jQuery.ajax({
          type:'POST',
          data:{action:'my_unique_action'},
          url: "http://mysite/wp-admin/admin-ajax.php",
          success: function(value) {
            val = value;
          },
          complete: function(){
            jQuery(this).html(val);
          }
        });
    });
});
22
ответ дан 1 December 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: