web-dev-qa-db-ja.com

重力フォームチェックボックス値を高度なカスタムフィールドに挿入する

重力フォームフォーム(新しい投稿を作成する)のチェックボックス値を[高度なカスタムフィールド]フィールドに入力しようとしています。私は情報を読み、投稿の中で情報を見つけました(質問の一番下にあります)。

これは正しいやり方ですか? ACFテキストボックスに複数のGFチェックボックスを挿入するのではありません。 ACFで同じオプションを使用してチェックボックスを作成する必要がありますか?これが私のコードです:

add_action("gform_post_submission", "acf_post_submission", 10, 2);

function acf_post_submission ($entry, $form)
{
    $post_id = $entry["post_id"];
    $values = get_post_custom_values("submit_intended", $post_id);  
    update_field("field_23", $values, $post_id);

}

私はまたスクリーンショットに関連する以下を試してみました:

add_action("gform_post_submission", "checkbox_arrays", 10, 2);
function checkbox_arrays($entry, $form)
{
    $post_id = $entry["post_id"];
    $form_id = $entry["form_id"];

    if ($form_id==3)
    {
        $values = get_post_custom_values("submit_gf_intended", $post_id);
        add_post_meta($post_id, "submit_intended", $values);
    }
}

この投稿 は高度なカスタムフィールドフォーラムで - http://support.advancedcustomfields.com/discussion/544/acf-and-gravity-forms/p1

私はいくつかのスクリーンショットも添付しました。

enter image description hereenter image description here

3
Rob

コンテンツを送信した直後にユーザーが自分の投稿を編集できるようにするためにGF Update Postプラグインを使用したいので、この問題に取り組む私の状況は少し問題でした。上記の解決策では、ACFはdbと正しいACFフィールドに書き込みません(少なくとも私には違います)。

私の解決策:

  1. ACFカスタムフィールドグループを作成し、同じチェックボックスを持つフィールドを追加して、重力フォームと同じmeta_keyを使用します。

  2. 送信後に関数を使用して、一致するすべてのキーを配列として取得し、ACFフィールドキーを更新します(画面に表示 - > ACFフィールドグループ編集画面のACFフィールド値)。

    add_action("gform_after_submission_YOUR_FORM_ID", "acf_post_submission", 10, 2);
    
    function acf_post_submission ($entry, $form)
    {
       $post_id = $entry["post_id"];
       $values = get_post_custom_values("YOUR_CUSTOM_FIELD", $post_id);
       update_field("ACF_FIELD_KEY", $values, $post_id);
    }
    
4
Andy

私は今朝再びこれを見ました、そして、私はあなたの問題と解決が両方とも非常に簡単であると考えます。

注意:現在のバージョンを使用する - WordPress 3.5、Advanced Custom Fields 3.5.7.2、Gravity Forms 1.6.11

まず、テキストフィールドのような「普通の」フィールドは追加の作業を必要としません。 ACFで作成し、それを使用する投稿を作成してGFで見つけられるようにし、GFフォームに追加して使用します。値がフィールドに書き込まれます。仕事は終わった。追加のコードは必要ありません。

チェックボックスの場合、複数のティックは投稿に追加する複数の値を意味します。 GFはあなたが普通のWordPressプラグインに期待することをします、それはpostmetaテーブルに複数のエントリーを作成します。しかし、それはACFが望んでいることではありません。投稿を編集してACFフィールドの複数のチェックボックスをオンにすると、保存されるのはシリアル化された配列を持つ単一のpostmetaレコードです。いいね。

そのため、GFが行っていることを「修正」してACFが望んでいるように壊れ、フォームのIDを取得し、GFが保存する前に投稿データを整理するフィルタを追加します。 postmetaへ:

$formID = 1;    // replace with ID of your form
add_filter("gform_post_data_$formID", 'wpse_78826_gformPostData', 10, 3);

/**
* dirty hack to write checkbox field values as serialised arrays
* to please Advanced Custom Fields, which is _doing_it_wrong()
* @param array $post_data not really the $_POST data, more like a summary of it
* @param array $form the GF form "object"
* @param array $lead the GF lead / entry "object"
* @return array
*/
function wpse_78826_gformPostData($post_data , $form, $lead) {
    $post_data['post_custom_fields']['checkboxen'] = serialize(explode(',', $post_data['post_custom_fields']['checkboxen']));

    return $post_data;
}

仕事は終わった。厄介なハック、しかしACFは少なくとも幸せです。

2
webaware