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

データを持たせたいけども、大人の事情でDBにデータをおけませんでした。そこで、記事それぞれにデータを持たせることになり、入れる先に決まったのがカスタムフィールドです。

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

しかし、WordPressのAPIによる自動投稿は、カスタムフィールドを含みません。デフォルトでは、Pythonでカスタムフィールドに値を設定できないです。以前に書いた記事を見ると分かります。

しかし、諦めずにREST APIでカスタムフィールドを操作する方法はないかと思って探したら、ありました。

WordPressのAPIでカスタムフィールドの値を操作する方法

まず、WordPressのfunction.phpに下のコードを追加します。

function.phpに追加


add_action( 'rest_api_init', 'create_api_posts_meta_field' );

function create_api_posts_meta_field() 
{
 	register_rest_field( 
		'post', 
		'user-fields', 
		array(
 			'get_callback' => 'get_post_meta_for_api',
 			'schema' => null,
 		)
 	);
}

function get_post_meta_for_api( $object ) 
{
 	$post_id = $object['id'];
 	return get_post_meta( $post_id );
}

次は、記事を追加するPythonのソースコードです。

先ほどfunciton.phpに追加したソースコードの”user-fields”をkeyにしてデータを入れると、WordPressの記事のカスタムフィールドに値が設定されます。

import requests

MY_URL: str = "https://********.com"
MY_USER: str = "***"
MY_APP_PASSWORD: str = "**** **** **** **** **** ****"

credentials = MY_USER + ':' + MY_APP_PASSWORD
token = base64.b64encode(credentials.encode())
headers = {'Authorization': 'Basic ' + token.decode('utf-8')}

post = {
            'title': title,
            'status': 'publish',	# 公開
            'content': content,
            'user-fields': meta_json	# JSON形式のデータ
        }

res = requests.post(f"{MY_URL}/wp-json/wp/v2/posts/", headers=headers, json=post)
if res.ok:
	pass

出典 Nate Finch

カスタムフィールドにデータを持たせるメリット

WEBサイトのABテストを気軽に行えるになりました。Pythonを使って更新するとはいえ、1000ページ以上もあるサイトのデザインを変更するには、1時間は掛かります。

それが、記事本文からデータを分離して、記事本文部分にはショートコードでカスタムフィールドのデータを呼び出すだけにすると、デザインの変更はショートコードの実装を変更するだけで済みます。つまり、function.phpの差し替えだけで済みます。

もう少し詳しく説明すると、記事本文には、”[display-items]”というショートコードだけを入れます。この”[display-items]”は、カスタムフィールドのデータを参照し、表示するものです。

“[display-items]”は、商品の一覧をHTMLにして返す、PHPのプログラムを呼び出すものです。PHPプログラムがレイアウトを決定します。そして、各ページ共通のものです。それが書かれているのがfunciton.phpになります。

そのため、記事本文を変更せず、funciton.phpを差し替えるだけで、瞬時にABテストが開始できます。

コメント

タイトルとURLをコピーしました