Created
June 24, 2012 07:46
-
-
Save retgef/2982319 to your computer and use it in GitHub Desktop.
Pug Bomb API Endpoint WordPress Plugin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.