プラグインAdvanced custom fields(ACF)のacf/save_postアクションの使用方法・解説

概要

acf/save_postアクションは、エクステンションやカスタム処理を実行するために使用されます。このアクションは、WordPressの投稿やカスタムフィールドが保存されるときにトリガーされ、特定の条件に応じてアクションを実行できます。具体的には、$_POST データを保存するときに発生します。

このアクションは、以下のシナリオでよく使用されます:

  1. カスタムフィールドの値を基にして関連情報を計算する。
  2. フィールドの値を検証して、不正なデータを受け付けないようにする。
  3. 保存時に自動的に投稿のステータスを変更する。
  4. その他のカスタムフィールドと連携して、データの整合性を保つ。
  5. 保存後に通知を送信する。
  6. 外部APIと連携し、データを送信する。

構文

add_action('acf/save_post', 'my_acf_save_post');
function my_acf_save_post($post_id) {
    // コードをここに追加
}

パラメータ

  • $post_id: 保存された投稿のID。これを使用して、特定の投稿に関連するカスタムフィールドデータを操作できます。

戻り値

このアクション自体は値を戻しませんが、フックされた関数内での処理結果に基づいて、異なる動作を実行することが可能です。

対応バージョン

  • Advanced Custom Fields (ACF): 5.0以上
  • WordPress: 4.0以上

この関数のアクションでの使用可能性

アクション 使用例
mu_plugin_loaded
registered_post_type
plugins_loaded
wp_roles_init
setup_theme
after_setup_theme
set_current_user
init
register_sidebar
wp_loaded
send_headers
parse_query
pre_get_posts
wp
template_redirect
get_header
wp_head

サンプルコード

サンプル 1: カスタムフィールドの値に基づく条件付きロジック

このコードは、投稿が保存されたときにカスタムフィールドの特定の値をチェックし、それに基づいてメタデータを更新します。

add_action('acf/save_post', 'update_meta_on_save');
function update_meta_on_save($post_id) {
    if (get_field('my_custom_field', $post_id) == 'yes') {
        update_post_meta($post_id, 'my_meta_field', 'some_value');
    }
}

引用元: [https://www.advancedcustomfields.com/resources/hooks/]

サンプル 2: 投稿のステータスを自動で変更

このコードは、特定の条件を満たす場合に投稿のステータスを「draft」に変更します。

add_action('acf/save_post', 'change_post_status');
function change_post_status($post_id) {
    if (get_field('my_custom_condition', $post_id)) {
        wp_update_post(array('ID' => $post_id, 'post_status' => 'draft'));
    }
}

引用元: [https://www.advancedcustomfields.com/resources/hooks/]

サンプル 3: 保存時に通知を送信

このコードは、投稿が保存されたときに指定したメールアドレスに通知を送信します。

add_action('acf/save_post', 'send_notification_email');
function send_notification_email($post_id) {
    $to = 'admin@example.com';
    $subject = '新しい投稿が保存されました';
    $message = '投稿ID: ' . $post_id;
    wp_mail($to, $subject, $message);
}

引用元: [https://www.advancedcustomfields.com/resources/hooks/]

サンプル 4: 外部APIへのデータ送信

投稿が保存されたときに、外部APIにデータを送信するサンプルコードです。

add_action('acf/save_post', 'send_data_to_external_api');
function send_data_to_external_api($post_id) {
    $data = array('post_id' => $post_id, 'status' => 'saved');
    $response = wp_remote_post('https://api.example.com/data', array('body' => json_encode($data)));
}

引用元: [https://www.advancedcustomfields.com/resources/hooks/]

サンプル 5: カスタムフィールドの変更をログ

このコードは、指定したカスタムフィールドが変更された際の記録をログファイルに書き込みます。

add_action('acf/save_post', 'log_custom_field_changes');
function log_custom_field_changes($post_id) {
    $old_value = get_field('my_custom_field', $post_id);
    $new_value = $_POST['acf']['field_123456']; // 'field_123456' はフィールドキー
    if ($old_value !== $new_value) {
        file_put_contents('my_log.txt', "旧値: $old_value, 新値: $new_valuen", FILE_APPEND);
    }
}

引用元: [https://www.advancedcustomfields.com/resources/hooks/]

この関数について質問する


上の計算式の答えを入力してください