Skip to content
Create a gist now

Instantly share code, notes, and snippets.

Pug Bomb API Endpoint WordPress Plugin
<?php
/*
Plugin Name: Pug Bomb API Endpoint
Description: Adds an API endpoint at /api/pugs/$n_pugs
Version: 0.1
Author: Brian Fegter
Author URL: http://coderrr.com
*/
class Pugs_API_Endpoint{
/**
* @var string Pug Bomb Headquarters
*/
protected $api = 'http://pugme.herokuapp.com/bomb?count=';
/** Hook WordPress
* @return void
*/
public function __construct(){
add_filter('query_vars', array($this, 'add_query_vars'), 0);
add_action('parse_request', array($this, 'sniff_requests'), 0);
add_action('init', array($this, 'add_endpoint'), 0);
}
/** Add public query vars
* @param array $vars List of current public query vars
* @return array $vars
*/
public function add_query_vars($vars){
$vars[] = '__api';
$vars[] = 'pugs';
return $vars;
}
/** Add API Endpoint
* This is where the magic happens - brush up on your regex skillz
* @return void
*/
public function add_endpoint(){
add_rewrite_rule('^api/pugs/?([0-9]+)?/?','index.php?__api=1&pugs=$matches[1]','top');
}
/** Sniff Requests
* This is where we hijack all API requests
* If $_GET['__api'] is set, we kill WP and serve up pug bomb awesomeness
* @return die if API request
*/
public function sniff_requests(){
global $wp;
if(isset($wp->query_vars['__api'])){
$this->handle_request();
exit;
}
}
/** Handle Requests
* This is where we send off for an intense pug bomb package
* @return void
*/
protected function handle_request(){
global $wp;
$pugs = $wp->query_vars['pugs'];
if(!$pugs)
$this->send_response('Please tell us how many pugs to send.');
$pugs = file_get_contents($this->api.$pugs);
if($pugs)
$this->send_response('200 OK', json_decode($pugs));
else
$this->send_response('Something went wrong with the pug bomb factory');
}
/** Response Handler
* This sends a JSON response to the browser
*/
protected function send_response($msg, $pugs = ''){
$response['message'] = $msg;
if($pugs)
$response['pugs'] = $pugs;
header('content-type: application/json; charset=utf-8');
echo json_encode($response)."\n";
exit;
}
}
new Pugs_API_Endpoint();
@robi-github

Hello there, thank you for the wonderful post about API endpoints in side wordpress which I found it hard to find some documentation or code snippets. I am hoping this will do what I want. I just need to serve a JSON response of custom database tables inside mysql. How do I actually make the request, and where should this file be inside my plugin? A sample plugin using this endpoint will be useful. Thank you.

@fbeenaerts

Dear Brian,

How could I call it from jqeury ajax?
I have an application in Java (same domain) and I want to allow access to this Java application when the user is logged in Wordpress.
So I created an API as you suggested, and I use the wp_get_current_user() in this API.

If I call the API directly from a browser, then it returns me the logged user of Wordpress. If I call it via Ajax in a jquery (JSP page), I don't get that user back.

Hope you can help me and wishing you all the best for 2016

Thanks for an answer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.