wir
7/13/2015 - 1:09 PM

gistfile1.txt

<?php
/**
 * Plugin Name: WDS GIF API
 * Plugin URI: http://webdevstudios.com
 * Description: Adds a Custom Post Type to store GIFs and an API JSON Endpoint to access GIFs by a tag.
 * Author: WebDevStudios
 * Author URI: http://webdevstudios.com
 * Version: 1.0.0
 * License: GPLv2
 */

/**
 * Create a Custom Post Type for our GIFs and Taxonomy to Tag Them.
 *
 * We are keeping this basic and passing in minimal arguments for demo purposes.
 */
function wds_gif_cpt_and_tax() {

	$cpt_args = array(
		'label'   => 'GIFs',
		'show_ui' => true,
		'supports' => array( 'title', 'thumbnail' ),
	);
	register_post_type( 'wds_gif', $cpt_args );

	$tax_args = array(
		'label'   => 'GIF Tags',
	);
	register_taxonomy( 'wds_gif_tag', 'wds_gif', $tax_args );

}
add_action( 'init', 'wds_gif_cpt_and_tax' );

/**
 * Rewrite an endpoint to get GIFs.
 */
function wds_gif_endpoint() {

	add_rewrite_tag( '%wds_gif%', '([^&]+)' );
	add_rewrite_rule( 'gifs/([^&]+)/?', 'index.php?wds_gif=$matches[1]', 'top' );

}
add_action( 'init', 'wds_gif_endpoint' );

/**
 * Pass through the data to the endpoint.
 */
function wds_gif_endpoint_data() {

	global $wp_query;

	$gif_tag = $wp_query->get( 'wds_gif' );

	if ( ! $gif_tag ) {
		return;
	}

	$gif_data = array();

	$args = array(
		'post_type'      => 'wds_gif',
		'posts_per_page' => 100,
		'wds_gif_tag'    => esc_attr( $gif_tag ),
	);
	$gif_query = new WP_Query( $args );
	if ( $gif_query->have_posts() ) : while ( $gif_query->have_posts() ) : $gif_query->the_post();
		$img_id = get_post_thumbnail_id();
		$img = wp_get_attachment_image_src( $img_id, 'full' );
		$gif_data[] = array(
			'link'  => esc_url( $img[0] ),
			'title' => get_the_title(),
		);
	endwhile; wp_reset_postdata(); endif;

	wp_send_json( $gif_data );

}
add_action( 'template_redirect', 'wds_gif_endpoint_data' );