Вызов функции JSON в WordPress - PullRequest
1 голос
/ 02 ноября 2010

В моем плагине WordPress мне нужно иметь опцию JSON для загрузки, используя jquery, информацию о пользовательском типе поста.Этот вызов jquery придет на страницу, где его должны видеть все пользователи.

насколько я понимаю из кодекса У меня должна быть функция:

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

А также действия:

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

Все в моем файле плагина.

тогда что-то вроде:

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);
    });
});

должно вызывать данную функцию.

Мой реальный вопрос в том, куда мне поместить все разные части - и если что-то не хватает.

Функция php и ловушки действий попадают в файл плагина.Но javascript, который меня больше смущает.Я хочу поместить его в файл плагина javascript, но так как мне нужно получить URL-адрес администратора, используя php, это становится проблемой.

Кроме того, как мне убедиться, что скрипт вызывается только на определенной странице?Есть ли еще крючки и фильтры, с которыми мне должно быть удобно?Или возможно загрузить его с помощью wp_enqueue_script при выполнении шорткода на этой странице, или это слишком поздно, как мне кажется, его нужно загрузить в заголовок.

Много вопросов, но я надеюсь, что вы понимаете суть моей проблемы - мне трудно разместить код в нужных местах в структуре wordpress.

РЕДАКТИРОВАТЬ: Вызов echo admin_url ('admin-ajax.php');По крайней мере, на мой взгляд, это не самый элегантный способ сделать это.Я предпочел бы иметь json API с отдельным URL и вызывать его в вызове ajax.Как мне настроить страницу в WordPress, которая возвращает только объект json?

1 Ответ

1 голос
/ 02 ноября 2010

То, что у вас есть выше, частично правильно.

при использовании вызова admin-ajax.php, у вас в комментариях со страницы кодекса wordpress есть

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

этотолько это ... используйте переменную javascript ' ajaxurl ' вместо вызова php ..

, чтобы она выглядела так:

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);
  });
});

, которая должна бытьВы .. просто поместите все свои функции в ваш основной файл плагина.когда WordPress загружается, он генерирует переменную с именем ajaxurl, которую вы затем можете использовать в своих скриптах ..:)

...