WordPressの投稿更新時にAPIを使って取得したデータをカスタムフィールドに登録する

WordPressで投稿を更新した際に自動で、APIを使用して取得したデータをカスタムフィールドに入れたいという話を先日伺ったので自分なりにサンプルを作成してみました。

  

この記事は1年以上前に書かれたものです。
情報が古い可能性があります。

なお当サンプルでは、投稿のタイトルをキーにしてAPIを使用し、関連する書籍のデータを取得しています。

検証バージョン

  • WordPress 3.3.2
  • WordPress 3.4

ソースコード

以下のソースコードをテーマのfunctions.phpに記述しました。
投稿を公開した時や更新した時にAPIで取得したデータがカスタムフィールドに入ります。
プロキシ環境やネットワークの環境によってAPIにアクセス出来ない場合は、タイムアウトになる可能性がございます。

<?php
// add_action( フックするアクション名, コールバック, 実行優先順位, 引数の数 )
add_action( 'save_post' , 'action_save_post', 99, 2 );
function action_save_post( $post_id, $post ) {

	if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
		/** 自動保存時 */
		
		// 何もしない
		return $post_id;
	} elseif ( !empty( $_POST ) ) {
		/** 投稿更新時 */

		// 投稿のタイトルをキーにAPIを使用
		$gbook = get_google_book_search_api( $post->post_title );

		// カスタムフィールド登録 update_post_meta( 投稿ID, カスタムフィールドのキー, 値 )
		update_post_meta( $post_id, 'gbook1',  $gbook );
		update_post_meta( $post_id, 'gbook2', $gbook );
	}
}

// 書籍を検索して関連のあるものを一件返す(テストなので中身云々はご勘弁)
function get_google_book_search_api( $name ) {

	$url = "http://books.google.com/books/feeds/volumes?hl=ja&q=". urlencode( $name ) ."&max-results=1";
	$str = file_get_contents( $url );
	$str = str_replace( "dc:", "", $str );
	$xml = simplexml_load_string( $str );

	return (string)$xml->entry->link[0]["href"];
}

実行結果

投稿タイトルに WordPress と入力して投稿を公開すると結果はこんな感じ。

参考

  

共有やブックマークなど