1. ホーム
  2. php

[解決済み] wp_insert_post_data のフィルターでカスタムフィールドの値を取得する

2022-02-24 05:04:47

質問

こんにちは , 読んでくださってありがとうございます。


環境 :

Wordpress + Advanced Custom Fields プラグイン


問題点 :

もう何時間も検索していますが、次のような正しい構文が見つからないようです。

新規投稿時にカスタムフィールドの値を取得し、投稿のタイトルをその値で自動的に置き換える。 例 投稿を作成し、「時間」のカスタムフィールドに「午前10時」を設定しました。投稿のタイトルは自動的に'10am'に置き換えられます。


そこで、以下のようなフィルタを追加しています。

add_filter('wp_insert_post_data', 'change_title') ;

function change_title($data)

{

    $time = XXX ; // How should I get this custom field value ?

    $new_title = 'Topic created at'.$time ;

    $data['post_title'] = $time ;

    return $data;

}


とても簡単なことなのでしょうが、WPとプラグインの両方のドキュメントにあるすべての機能を試しました。私なら ありがたい 通りすがりの人が解決策を教えてくれたら。

ありがとうございました。

どのように解決するのですか?

グローバル変数 $_POST にアクセスしてフィールドの値を取得することもできますが、save_post アクションを使用して投稿のタイトルを更新する方が、よりすっきりした方法でそれを行うことができると思います。

add_action('save_post', 'change_title');

function change_title($post_id) {
    $time = get_field('time',$post_id);
    $post_title = 'Topic created at '. $time;

    // unhook this function so it doesn't loop infinitely
    remove_action('save_post', 'change_title');

    // update the post, which calls save_post again
    wp_update_post(array('ID' => $post_id, 'post_title' => $post_title));

    // re-hook this function
    add_action('save_post', 'change_title');
}  

ACFフィールド名が"time"であると仮定して。

編集:Mark Chittyの回答に従って、回答を更新しました。