ご注意!

この記事には PHP コードが含まれており、開発者を対象としています。このコードは便宜上提供していますが、コードのカスタマイズやサードパーティの開発についてはサポートを提供していません。

追加のガイダンスについては、WPBeginner の カスタムコードの追加方法に関するチュートリアル を参照してください。

閉じる

投稿送信でチェックボックス値を配列として保存する方法

はじめに

Advanced Custom Fields プラグインから作成したカスタムメタフィールドに、投稿投稿フォームのチェックボックスの値を配列として保存しますか? 小さなPHPスニペットを使用すると、これらの値をカスタムフィールドの配列として保存できます。

デフォルトでは、投稿投稿アドオンでカスタムフィールドがマッピングされると、WPForms はすべてのフォームで WPForms がデータを保存するのと同じ形式でカスタムフィールドにデータを保存します。

たとえば、チェックボックスフォームフィールド(および複数の値を持つもの)の場合、WPForms は値を単一の文字列として、各値を新しい行に保存します。



ただし、小さなPHPスニペットを使用すると、これを配列として保存するように簡単に変更できます。

array( '赤', '緑', '青')

カスタムフィールドの作成

まず、Advanced Custom Fields プラグインを使用して、投稿のカスタムフィールドを作成します。

カスタムフィールドの設定に関する詳細情報が必要な場合は、この記事を参照してください

ACFフィールドを設定する際は、一致していることを忘れないでください。チェックボックスのカスタムフィールドを作成した場合は、フォームフィールドもチェックボックスであることを確認してください。

投稿にカスタムフィールドを作成する

フォームの作成

次に、投稿投稿フォームを作成し、フォームにチェックボックスフィールドを追加します。

フォームにチェックボックスフィールドを追加する

投稿投稿フォームの設定についてサポートが必要な場合は、このドキュメントを参照してください

残りのフィールドをフォームに追加したら、設定タブに移動し、投稿投稿をクリックして、カスタムフィールドが正しくマッピングされていることを確認します。

フォームビルダーの投稿送信タブですべてのカスタムフィールドをマッピングしていることを確認してください

値を配列として保存するスニペットの追加

値を配列として保存するには、このスニペットをサイトにコピーするだけです。

スニペットをサイトに追加するのにヘルプが必要な場合は、このチュートリアルを参照してください。

/**
 * Turn checkbox values into an array.
 *
 * @link https://wpforms.com/developers/how-to-store-checkbox-values-as-arrays-with-post-submissions/
 */
  
function wpf_dev_post_submission_process_meta( $field_value, $meta_key, $field_id, $fields, $form_data ) {
 
    // Only run on my form with ID = 443
    if ( absint( $form_data[ 'id' ] ) !== 443 ) {
            return;
    } 
      
    // The $meta_key name is the same name that shows in the Field Name on Advanced Custom Fields
    if ( $meta_key === 'have_visited' ) {
 
            $field_value = explode( "\n", $field_value );
 
        }
  
    return $field_value;
}
add_filter( 'wpforms_post_submissions_process_meta', 'wpf_dev_post_submission_process_meta', 10, 5 );

注意: ここで注意すべき重要な点は、WPForms のエントリー画面と投稿の編集中のメタフィールドでは、チェックボックスが表示されることです。配列として表示されるのは、値をエコーアウトするときのみです(1行で表示され、次のステップで示します)。また、フォーム ID を 443 からご自身のフォーム ID に一致するように更新することを忘れないでください。フォーム ID の場所を見つけるのにヘルプが必要な場合は、この役立つドキュメントを確認してください

値の表示

次に、これらの値を単一投稿テンプレートに表示します。WPForms はテーマにライブ変更を加えることを推奨しないため、子テーマまたはカスタム関数を使用してテンプレートにエコーアウトするのが最善です。

子テーマの作成に関する詳細については、WPBeginner の友人によるこの優れた記事をご覧ください。

単一投稿テンプレートで値を配列として表示する
<div class="states_wrapper">
    <?php if( get_field('have_visited') ): ?> 
        <p>I've already visited these states in the last 5 years: <?php the_field('have_visited'); ?></p> 
    <?php endif; ?>
</div>

このチュートリアルの目的上、子テーマを作成し、single.php にこのコード行を追加して、まず値が存在することを確認し、存在する場合は表示します。

投稿が表示されると、状態は行ごとの表示ではなく、段落形式で一覧表示されます。

これでチェックボックスの値が1行で表示されます

これで完了です!WordPressデータベースでの値の保存方法を正常に変更しました。チェックボックスフォームフィールドのラベルにテキストの代わりに画像を使用しますか?CSSを使用してチェックボックスラベルに画像を適用する方法の記事をご覧ください。

フィルターリファレンス: wpforms_post_submissions_process_meta

よくある質問

A: 他のアドオンでも使用できますか?

A: もちろんです!例えば、このチュートリアルで説明したのと同じシナリオを、ユーザー登録アドオンに追加して、ACFを使用してWordPressユーザープロファイルにさらに情報を追加しながら、ユーザープロファイルページに自動的に保存されるようにすることができます。

ユーザー登録アドオンバージョン2.8.0以降では、カスタムメタ値の保存フィルターは次のとおりです。

wpforms_user_registration_process_base_custom_meta_value

注意: 古いバージョン(ユーザー登録2.8.0より前)では、このフィルターは次のように名前が付けられていました。

wpforms_user_registration_process_registration_custom_meta_value

レガシーサイトを維持している場合は、後方互換性のために両方のフックを保持できます。

/**
 * Turn checkbox values into an array with the User Registration addon.
 *
 * @link https://wpforms.com/developers/how-to-store-checkbox-values-as-arrays-with-post-submissions/
 */
function wpf_dev_user_submission_process_meta( $field_value, $meta_key = '', $field_id = 0, $field = array(), $form_data = array() ) {

	// The $meta_key name is the same name that shows in the Field Name on Advanced Custom Fields.
	if ( $meta_key === 'have_visited' ) {
		$field_value = explode( "\n", $field_value );
	}

	return $field_value;
}

// User Registration addon 2.8.0+.
add_filter( 'wpforms_user_registration_process_base_custom_meta_value', 'wpf_dev_user_submission_process_meta', 10, 5 );

// Backward compatibility for older versions (before 2.8.0).
add_filter( 'wpforms_user_registration_process_registration_custom_meta_value', 'wpf_dev_user_submission_process_meta', 10, 5 );

これで完了です!WPFormsがカスタム投稿メタフィールドにマッピングすると、送信されたチェックボックスの値が配列として保存されるようになります。

カスタム投稿メタフィールドのマッピングを含む投稿送信の設定について、投稿送信アドオンガイドでさらに詳しく知りたいですか?