WP REST APIで投稿を追加する

WordPressに REST APIを通じて操作できる「WP REST API」。Version 2.0がまだβ版ですが、触ってみました。

プラグインのインストール

WP REST API Version 2.0は、まだ公式ディレクトリからはインストールできないため、GitHubなどからダウンロードして ZIPファイルのアップロードという方法でインストールを行ないます。

インストール後は、念のためパーマリンク設定を更新しておくと良いでしょう。なお、パーマリンク設定が「標準」の状態だと動作しません。

投稿を取得する

「GET」は非常に簡単です。次のようなプログラムを組みます。

jQuery.getJSON('wp-json/wp/v2/posts', function(json) {
    console.log(json[0].title.rendered);
});

「wp-json/wp/v2/posts」というURLが、JSONで最新エントリーを取得する URLになるため、これを jQueryなどで呼び出すとJSONデータが取得できます。他に、個別の投稿取得など、機能別にURLが割り当てられています。

新規に投稿する

「POST」は非常にややこしく、公式ドキュメントを読んでもうまく動かせませんでした。
あれこれ調べて、次の手順で一応うまく行きましたが、これで正しいのかまだ分かっていません。

最初に、<head>要素内に以下を記述します。

<?php wp_enqueue_script('wp-api', bloginfo('url') . '/wp-content/plugins/rest-api/wp-api.js'); ?>
<?php wp_localize_script( 'wp-api', 'WP_API_Settings', array( 'root' => esc_url_raw( rest_url() ), 'nonce' => wp_create_nonce( 'wp_rest' ) ) ); ?>

これにより、「wp-api.js」という JavaScriptファイルが読み込まれ、その時に同時に WordPressのログイン認証の情報が JavaScriptに渡されるようです。次に、<body>要素の最後に以下を記述します(wp_footer() よりも後)

jQuery.ajax( {
    url: wpApiSettings.root + 'wp/v2/posts',
    method: 'POST',
    beforeSend: function ( xhr ) {
        xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
    },
    data:{
        'title' : 'Hello'
    }
} ).done( function ( response ) {
    console.log( response );
} );

これで、「Hello」という投稿が下書き状態で投稿されます。

なお、このスクリプトは WordPressのテーマファイル内でのみ動作し、また WordPressにログインしている状態でのみ動作します。もし、外部のサイトやアプリなどから REST APIを利用する場合は、別途 OAuth認証などを行なう必要があるようです。こちらも追って試してみたいと思います。