8

こんにちは、読んでくれてありがとう。


環境:

Wordpress + 高度なカスタム フィールド プラグイン


問題 :

何時間も検索しましたが、次のことを行うための正しい構文が見つからないようです:

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


例:

だから私は次のフィルターを追加しています:

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 とプラグインのドキュメントの両方で利用可能なすべての機能を試しました。通りすがりの人が私に解決策を教えてくれたら、とても感謝しています。

前もって感謝します !

4

4 に答える 4

6

フィールド値のグローバル $_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の回答に従って回答を更新しました。

于 2014-02-12T02:45:19.190 に答える
0

あなたはこれを試すことができます

add_filter( 'wp_insert_post_data', 'change_title', '99', 2 );

function change_title($data , $postarr){

    $custom_field = 'custom_filed_name';
    $post_id = $postarr['ID'];
    $time = get_post_meta( $post_id, $custom_field, true );

    // Now you have the value, do whatever you want
}
于 2014-02-12T02:34:57.910 に答える