Skip to content

Instantly share code, notes, and snippets.

@mwender
Created November 25, 2013 21:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mwender/7649377 to your computer and use it in GitHub Desktop.
Save mwender/7649377 to your computer and use it in GitHub Desktop.
Functions which allow querying WordPress directly. Useful for AJAX callbacks.
add_filter( 'query_vars', 'theme_query_vars' );
/**
* Adds variables to $wp->query_vars
*
* @param array $vars Global WP query vars.
* @return array Array used in $wp->query_vars.
*/
function theme_query_vars( $vars ){
$vars[] = 'qa'; // "query_action" - used for switch in theme_parse_request()
return $vars;
}
add_action( 'parse_request', 'theme_parse_request' );
/**
* Parses requests to this theme.
*
* @param obj $wp Global WordPress query object.
* @return string Returns headers and string for specified mime_type response.
*/
function theme_parse_request( $wp ){
if( ! array_key_exists( 'qa', $wp->query_vars ) )
return;
$qa = $wp->query_vars['qa'];
switch( $qa ){
default:
$return['message'] = 'No switch set for ' . $qa . '.';
$type = 'application/json';
break;
}
theme_return_action( $return, $type );
}
/**
* Returns a response as specified by the supplied mime type
*
* @param array||string $return Data to be returned.
* @param string $mime_type Optional. Valid mime type.
* @param numeric $status HTTP Status code.
* @return string HTTP response.
*/
function theme_return_action( $return = '', $mime_type = 'application/json', $status = 200 ){
if( $mime_type == 'application/json' && is_array( $return ) ) $return = json_encode( $return );
http_response_code( $status );
header('Content-type: '.$mime_type.'; charset=utf-8');
header("Expires: Wed, 28 Jul 1997 02:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
die( $return );
}
if (!function_exists('http_response_code')) {
/**
* Returns HTTP response code string or executes HTTP response header
*
* @param numeric $code HTTP response code.
* @return string HTTP response status.
*/
function http_response_code($code = NULL) {
if ($code !== NULL) {
switch ($code) {
case 100: $text = 'Continue'; break;
case 101: $text = 'Switching Protocols'; break;
case 200: $text = 'OK'; break;
case 201: $text = 'Created'; break;
case 202: $text = 'Accepted'; break;
case 203: $text = 'Non-Authoritative Information'; break;
case 204: $text = 'No Content'; break;
case 205: $text = 'Reset Content'; break;
case 206: $text = 'Partial Content'; break;
case 300: $text = 'Multiple Choices'; break;
case 301: $text = 'Moved Permanently'; break;
case 302: $text = 'Moved Temporarily'; break;
case 303: $text = 'See Other'; break;
case 304: $text = 'Not Modified'; break;
case 305: $text = 'Use Proxy'; break;
case 400: $text = 'Bad Request'; break;
case 401: $text = 'Unauthorized'; break;
case 402: $text = 'Payment Required'; break;
case 403: $text = 'Forbidden'; break;
case 404: $text = 'Not Found'; break;
case 405: $text = 'Method Not Allowed'; break;
case 406: $text = 'Not Acceptable'; break;
case 407: $text = 'Proxy Authentication Required'; break;
case 408: $text = 'Request Time-out'; break;
case 409: $text = 'Conflict'; break;
case 410: $text = 'Gone'; break;
case 411: $text = 'Length Required'; break;
case 412: $text = 'Precondition Failed'; break;
case 413: $text = 'Request Entity Too Large'; break;
case 414: $text = 'Request-URI Too Large'; break;
case 415: $text = 'Unsupported Media Type'; break;
case 500: $text = 'Internal Server Error'; break;
case 501: $text = 'Not Implemented'; break;
case 502: $text = 'Bad Gateway'; break;
case 503: $text = 'Service Unavailable'; break;
case 504: $text = 'Gateway Time-out'; break;
case 505: $text = 'HTTP Version not supported'; break;
default:
exit('Unknown http status code "' . htmlentities($code) . '"');
break;
}
$protocol = ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' );
header( $protocol . ' ' . $code . ' ' . $text );
$GLOBALS['http_response_code'] = $code;
} else {
$code = (isset($GLOBALS['http_response_code']) ? $GLOBALS['http_response_code'] : 200);
}
return $code;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment