Calling json function in wordpress

In my wordpress plugin I need to have a JSON option to load, using jquery, info about a custom post type. This jquery call will come in a page where all users should see it.

as far as i understand from the codex I should have a function:

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

As well as the actions:

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

All in my plugin file.

then something like:

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

should call the function in question.

My real question is where i should place all the different parts – and if something is missing.

The php function and the actions hooks go into the plugin file. But the javascript I am more confused about. I want to put it in the plugin javascript file, but since i have to fetch the admin url using php that becomes a problem.

Also how do I make sure that the script is only called if in a certain page? Are there more hooks and filters I should be comfortable with? Or is it possible to load it using wp_enqueue_script when executing a shortcode on that page, or is that to late, as I would seem it needs to be loaded in the header.

A lot of questions, but I hope you understand the basis of my problem – I have a hard time placing the code in the right places in the wordpress structure.

EDIT:
Calling echo admin_url(‘admin-ajax.php’); is not, at least in my eyes the most elegant way of doing it. I’d rather have a json API, with its seperate url, and calling it in the ajax call. How would I go about setting up a page in wordpress that only returns a json object?

Related posts

Leave a Reply

1 comment

  1. What you have above is partially correct.

    when using the call to admin-ajax.php, you have in the comments from the wordpress codex page is

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

    this is just it… use the javascript variable ‘ajaxurl‘ in place of the php call..

    so it would look like this

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

    that should be you.. just place all your functions inside your main plugin file.
    when wordpress loads it will produce a variable called ajaxurl that you can then use in your scripts.. 🙂