【ワードプレス】プラグインを使わず、簡単にワードプレスの記事データをJSON形式で出力する方法

プラグインを使わず、簡単にワードプレスの記事データをJSON形式で出力する方法です。

実装は簡単で、以下のコードをfunctions.phpに追記するだけです。

add_action('wp', array(JsonAPI::getInstance(), 'initialize') );

class JsonAPI
{
    private static $_instance;

    public function initialize(){}

    public static function getInstance()
    {
        if ( ! isset(self::$_instance) )
        {
            self::$_instance = new self;
        }
        return self::$_instance;
    }

    function __construct()
    {
        $this->charset = get_bloginfo( 'charset' );

        add_action( 'wp_ajax_' . $_REQUEST['action'], array($this, $_REQUEST['action']) );
        add_action( 'wp_ajax_nopriv_' . $_REQUEST['action'], array($this, $_REQUEST['action']) );
    }

    function json_api()
    {
        $result = new WP_Query(JsonAPI::args());
        $status = (result->post_count > 0) ? "OK" : "NotFound";

        JsonAPI::json_response($status, $result);
    }

    function args()
    {
        $defaults = array(
            'ignore_sticky_posts'  => 1,
            'posts_per_page' => -1,
            'post_type' => 'post',
            'post_status' => 'publish'
        );

        $url = parse_url($_SERVER['REQUEST_URI']);
        $args = wp_parse_args($url['query'], defaults);
        unset($args['action']);

        return $args;
    }

    function json_response($status, $data)
    {
        nocache_headers();
        header( "Content-Type: application/json; charset={$this->charset}" );

        $response = json_encode(array('status' => $status, 'count' => $data->post_count, 'posts' => $data->posts));
        die ($response);
    }
}

あとは以下のようなURLを叩けば、JSON形式で記事データが出力されます。

http://domain/wp-admin/admin-ajax.php?action=json_api&posts_per_page=10

関数リファレンス/WP Queryを参考にクエリパラメータを変えてあげれば、様々なJSONデータが出力されます。

お気軽にコメントをどうぞ

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください