WordPress│WP REST APIとGASを使った投稿・更新方法

WordPressの記事を更新する際に、意外と編集画面を開くのに時間がかかりますよね?

CSVのインポートでも良いのですが、もっと便利で早い方法がWP REST APIを使った方法です。

ネットではPythonを使った方法が良く紹介されているのですが、環境構築が面倒だったので、

GAS(Google Apps Script)を使って記事投稿・更新をしてみました。

これであればGoogleにログインできれば、いつでもコードを編集・実行できます。

本記事では、GASでWP REST APIを使った投稿方法まとめてみました。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

GASとWP REST APIを使って記事投稿をする方法

まずは基本の使い方から、新規記事を投稿してみます。

STEP
ユーザーからアプリケーションパスワードの設定

管理画面からユーザー>ユーザー一覧>ユーザー(管理者)を選択してアクセス。

ユーザーにアプリケーションパスワードという項目が追加されているので、ユーザー名を入力してパスワードを発行しましょう。

STEP
GASからREST APIを使って記事投稿をする

スプレッドシートからGoogle Apps Script(GAS)を起動。

下記のコードに必要な項目を加えて実行します。

function postReport() {

	var siteUrl = 'WordpressサイトのURL';
	var user = 'ユーザ名';
	var pass = 'パスワード';
	var title = '自動投稿テスト';
	var content = 'これは自動投稿です。';

	var apiUrl = siteUrl + 'wp-json/wp/v2/posts';

	var headers = {
		'Content-Type': 'application/json',
		'Authorization': 'Basic ' + Utilities.base64Encode(user + ":" + pass)
	};

	var arguments = {
		'title': title,//タイトル
		'content': content,//本文
		'status': 'publish',//公開状態
		'comment_status': 'closed', //コメントの状態
	}

	var options = {
		'method': 'POST',
		'muteHttpExceptions': true,
		'headers': headers,
		'payload': JSON.stringify(arguments)
	};

	var response = UrlFetchApp.fetch(apiUrl, options);
	var responseJson = JSON.parse(response.getContentText());

	return responseJson;
}

※GASを実行した時、初回は権限の確認がありますので、表示される画面の詳細ボタンから許可をしましょう。

記事が投稿されているのを確認します。

GASとWP REST APIを使って記事更新をする方法

続いてすでにある記事を更新したい場合です。

URLに記事IDを足してあげるだけです。

実行すると、タイトルや本文が差し変わります。

function postReport() {

	var siteUrl = 'WordpressサイトのURL';
	var user = 'ユーザ名';
	var pass = 'パスワード';
	var title = '自動更新投稿テスト';
	var content = 'これは自動更新投稿です。';

	var postId = '20765';//記事ID
	var apiUrl = siteUrl + 'wp-json/wp/v2/posts/'+ postId;

	var headers = {
		'Content-Type': 'application/json',
		'Authorization': 'Basic ' + Utilities.base64Encode(user + ":" + pass)
	};

	var arguments = {
		'title': title,//タイトル
		'content': content,//本文
		'status': 'publish',//公開状態
		'comment_status': 'closed', //コメントの状態
	}

	var options = {
		'method': 'POST',
		'muteHttpExceptions': true,
		'headers': headers,
		'payload': JSON.stringify(arguments)
	};

	var response = UrlFetchApp.fetch(apiUrl, options);
	var responseJson = JSON.parse(response.getContentText());

	return responseJson;
}

問題なく、タイトルが差し変わりました。

本文も差し変わっています。

GASとWP REST APIを使ってカスタムフィールドを更新する方法

WP REST APIでカスタムフィールドを更新する場合はregister_rest_fieldで定義してあげる必要があります。

他にも更新できる要素を追記してみました。

STEP
カスタムフィールドを設定

無料のプラグインSmart Custom Fieldsをインストールします。

管理画面からSmart Custom Fieldsを選択して

繰り返しのテキスト(field1 field2)と普通のテキスト(field3)のカスタムフィールドを設定します。

STEP
functions.phpを設定

設定したカスタムフィールドをfunctions.phpにて定義します。

※update_post_metaは更新する関数です。
もし繰り返しのカスタムフィールドで足したい場合はadd_post_metaの関数を使いましょう。

add_action( 'rest_api_init',  function() {
  register_rest_field(
    'post',        // post type
    'post_meta',   // rest-apiに追加するキー
    array(
		'get_callback'  => function(  $object, $field_name, $request  ) {
			// 出力したいカスタムフィールドのキーをここで定義
			$meta_fields = array(
			  'field1',
			  'field2',
			  'field3'	
			);
			$meta = array();
			foreach ( $meta_fields as $field ) {
				$meta[ $field ] = get_post_meta( $object[ 'id' ], $field, false );
			}
			return $meta;
		},
		'update_callback' => function(  $value, $post, $field_name) {
		  if (!$value) {return;}
		  foreach($value as $key => $data){
			if(is_array($data)){
			  foreach($data as $record){
			  	update_post_meta($post->ID, $key, $record);
			  }
			}else{
				update_post_meta($post->ID, $key, $data);
			  //add_post_meta($post->ID, $key, $data);
			}
		  }
		},
      'schema'          => null,
    )
  );
});
STEP
GASの実行

post_metaにカスタムフィールド名と値を入力します。

function postReport() {

	var siteUrl = 'WordpressサイトのURL';
	var user = 'ユーザ名';
	var pass = 'パスワード';
	var title = 'カスタムフィールドの更新投稿テスト';
	var content = 'これはカスタムフィールドの更新投稿です。';

	var postId = '20765';//記事ID
	var apiUrl = siteUrl + 'wp-json/wp/v2/posts/'+ postId;

	var headers = {
		'Content-Type': 'application/json',
		'Authorization': 'Basic ' + Utilities.base64Encode(user + ":" + pass)
	};

	var arguments = {
    'date': '2022-01-20T00:00:00',//公開日
    'slug': 'mytest',//パーマリンク
		'title': title,//タイトル
		'content': content,//本文
		'status': 'publish',//公開状態
		'comment_status': 'closed', //コメントの状態
    'featured_media':'20634', //アイキャッチ画像ID
    'categories':'10', //カテゴリーID
    'post_meta': {
      'field1': 'りんご',
      'field2': 'ごりら',
      'field3': 'らっぱ'      
    },   
	}
	var options = {
		'method': 'POST',
		'muteHttpExceptions': true,
		'headers': headers,
		'payload': JSON.stringify(arguments)
	};

	var response = UrlFetchApp.fetch(apiUrl, options);
	var responseJson = JSON.parse(response.getContentText());

	return responseJson;
}

GASの実行後、カスタムフィールドが更新されました。

以上です。

参考

以下のWP REST APIの記事を参考にさせていただきました。

まとめ

WP REST APIは高速で記事の追加・更新ができて非常に便利です。

通常はPythonを駆使してサイトの自動構築・更新にも使われる技術です。

記事の公開日を自動更新する仕組みを作りたくて、色々調べていたら

結果的にWP REST APIが面白い!ということで検証してみた結果になります。

もし気になる方がいらっしゃいましたら、是非試してみて下さい。

Web制作のご依頼

SEOからデザインまで魅力的なWebサイトを制作いたします。

目次