記事を保存したときにAdvanced Custom Fieldsで設定したフィールドの値を取得する。

Advanced Custom Fields に最近お世話になりっぱなしです。カスタムフィールドが手軽に扱えるし、ユーザーにもかなり優しいUIを作り易いし。

そんな訳でACFを使ってちょっとした機能を作るときのTipsです。

よく、記事の公開、公開中の記事の公開時には、publish_postというアクションフックが実行されます。しかし、この段階では、カスタムフィールドの値はデータベースに保存されていません。

なので、$_POSTで送信されてきた値をとってきます。

[php]
add_action("publish_post","my_publish_post");

function my_publish_post( $post_id ) {

$acf_field = get_field_object( "hoge" );
$acf_field_key = $acf_field["key"];

if( isset( $_POST["fields"][$acf_key] ) {
$field_value = $_POST["fields"][$acf_key];

//ここに処理。
}

}
[/php]

hogeというキーで設定したフィールドの値はこんな感じで取得できます。

これに、WordPressで記事の公開期間を簡単コントロール!カスタムフィールドに開始・終了日時を指定するだけでOKのクラス | Pimp My Site

を組み合わせて、

[php]
class PM_Schedule_Post_ACF extends PM_Schedule_Post {

protected function get_meta( $key ) {
$val = ”;
$acf_field = get_field_object( $key );
$acf_key = $acf_field["key"];

if ( isset( $_POST["fields"][$acf_key] ) ) {
$field = htmlspecialchars( $_POST["fields"][$acf_key], ENT_QUOTES );
}
else {
$val = parent::get_meta ( $key );
}

return $val;

}

}

add_action( ‘after_setup_theme’, function() {
new PM_Schedule_Post_ACF( "pubstart", "pubend", "公開終了" );
});
[/php]

みたいな感じで使ってます。実際に使っているのはもう少しガリガリいじっているのでまたそれは後日アップします。

管理画面のUIをACFで統一できるので、かなり使い勝手の良い管理画面を作れると思います!