ご注意!

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

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

閉じる

WPFormsで動的な選択肢をカスタマイズする方法

チェックボックス複数選択ドロップダウンフィールドの動的選択肢オプションをカスタマイズしますか?動的選択肢を使用しているが、特定の投稿、ページ、またはカテゴリを除外したい場合は、このチュートリアルが役立ちます!

複数選択チェックボックスドロップダウンフィールドは、投稿またはページのタイトルを動的選択肢として動的に表示するように設定できます。

デフォルトでは、動的選択肢が有効になっている場合、その特定の投稿タイプまたはタクソノミーの公開されているすべてのアイテムが表示されます。

たとえば、動的選択肢投稿タイプに設定され、動的投稿タイプソース投稿に設定されている場合、公開されているすべての投稿がフィールドの選択肢として表示されます。

投稿の投稿タイプに動的な選択肢を使用すると、サイト上の公開されているすべての投稿のリストが動的に生成されます。

このチュートリアルでは、サイトから動的に生成された投稿タイトルのドロップダウンを表示します。

フォームの作成

まず、名前、メールアドレス、訪問者が最も気に入った投稿を選択できる機能、そしてコメントセクションをキャプチャするフォームを作成します。

このため、フォームに名前、メールアドレス、ドロップダウン、段落テキストのフォームフィールドを追加します。

ドロップダウンフィールドを追加したら、高度なオプションをクリックし、動的選択肢ドロップダウンで投稿タイプをクリックします。これにより、動的投稿タイプソースの別のドロップダウンが表示されます。この2番目のドロップダウンが表示されたら、ドロップダウンから投稿を選択し、フォームの保存をクリックします。

デフォルトでは、投稿の投稿タイプを使用して動的な選択肢を有効にすると、公開されているすべての投稿が表示されます。

フォームの作成にヘルプが必要な場合は、このドキュメントを確認してください

特定のカテゴリからの投稿を含めるスニペットの追加

コードスニペットを使用して、これらのオプションをさらにカスタマイズすることもできます。特定のカテゴリからの投稿のみを含めたり、特定のカテゴリからの投稿を除外したりすることもできます。

たとえば、このチュートリアルでは、特定のカテゴリからの投稿のみを表示したいので、カテゴリ11からの投稿のみでドロップダウンをポップulateするコードスニペットを追加します。

コードスニペットをサイトに追加する方法については、このチュートリアルを参照してください

/**
 * Limit posts or pages displayed by category.
 *
 * @link https://wpforms.com/developers/how-to-exclude-posts-pages-or-categories-from-dynamic-choices/
 */
 
function wpf_dynamic_choices_categories( $args, $field, $form_id ) {
     
    // For field #10 in form #851, only show entries in category #37
    if ( '851' == $form_id && '10' == $field[ 'id' ] ) {
 
        $args[ 'category' ] = '22';
 
    } 
     
    return $args;
     
}
 
add_filter( 'wpforms_dynamic_choice_post_type_args', 'wpf_dynamic_choices_categories', 10, 3 );

カテゴリのID番号を見つけるには、このチュートリアルを確認してください

コードスニペットのフォームとフィールドIDを、お使いのフォームとフィールドID番号と一致するように変更することを忘れないでください。フォームとフィールドID番号を見つけるのにヘルプが必要な場合は、このチュートリアルを確認してください

複数のカテゴリIDに対する複数のフォームの制限

このコードスニペットをさまざまなフォームやフィールドに使用できることをご存知でしたか?

以下のコードは、2つの異なるフォーム内の動的オプションを制限します:

  • フォームID 363のフィールドID 1は、カテゴリID 11の投稿のみを表示します
  • フォームID 225のフィールドID 20は、カテゴリID 5の投稿のみを表示します
/**
 * Limit posts or pages displayed by category.
 *
 * @link https://wpforms.com/developers/how-to-exclude-posts-pages-or-categories-from-dynamic-choices/
 */
 
function wpf_dynamic_choices_categories( $args, $field, $form_id ) {
 
    // For field #1 in form #363, only show entries in category #11
    if ( '363' == $form_id && '1' == $field[ 'id' ] ) {
 
        $args[ 'category' ] = '11';
 
    // For field #20 in form #225, only show entries in category #5
    } elseif ( '225' == $form_id && '20' == $field['id'] ) {
 
        $args[ 'category' ] = '5';
 
    }
 
    return $args;
}
 
add_filter( 'wpforms_dynamic_choice_post_type_args', 'wpf_dynamic_choices_categories', 10, 3 );

タクソノミーによる制限

タクソノミーは、WordPressでカテゴリタグなどを定義するために使用される用語です。

ダイナミック選択肢タクソノミーに設定され、ダイナミックタクソノミーソースカテゴリに設定されている場合、すべてのカテゴリがフィールドの選択肢として使用されます。

以下のコードスニペットを使用して、すべてのタキソノミーを選択肢として表示する際にカテゴリを除外することも可能です

ただし、以下のスニペットを使用して特定のカテゴリを除外できます。

/**
 * Exclude categories from dynamic choices.
 *
 * @link https://wpforms.com/developers/how-to-exclude-posts-pages-or-categories-from-dynamic-choices/
 */
 
function wpf_dev_dynamic_choices_exclude( $args, $field, $form_id ) {
 
    if ( is_array( $form_id ) ) {
        $form_id = $form_id[ 'id' ];
    }
 
    // Only on form #212 and field #16
    if ( $form_id == 212 && $field[ 'id' ] == 16 ) {
 
        // Category IDs to exclude
        $args[ 'exclude' ] = '4,5,6,11';
    }
 
    return $args;
 
}
 
add_filter( 'wpforms_dynamic_choice_taxonomy_args', 'wpf_dev_dynamic_choices_exclude', 10, 3 );

このスニペットは、IDが4、5、6、11のカテゴリをダイナミック選択肢オプションから除外します。スニペットのexcludeincludeに置き換えると、追加したIDを持つカテゴリのみが表示されます。

これで、スニペットで設定した投稿、ページ、タグ、またはカテゴリのみがドロップダウンに表示されます。

未来の投稿のみを表示する

/*
 * Only display future posts in the dynamic choices
 *
 * @link https://wpforms.com/developers/how-to-exclude-posts-pages-or-categories-from-dynamic-choices/
 
 */
 
 
function wpf_dev_only_future_posts( $args, $field, $form_id ) {
     
    // Only run this snippet on form ID 2575 & only on field ID 19
    if ( '2575' == $form_id && '19' == $field[ 'id' ] ) {
  
        // If the Dynamic Choices is set to Post Type
        // Look for and only display the posts that have been scheduled with a future date
        $args[ 'post_status' ] = [ 'publish', 'future' ];
  
    }
     
    return $args;
  
}
  
add_filter( 'wpforms_dynamic_choice_post_type_args', 'wpf_dev_only_future_posts', 10, 3 );

現在ログインしているユーザーの投稿のみを表示する

/*
 * Set the number of days to delete partial entries when using the Save and Resume addon
 *
 * @link https://wpforms.com/developers/how-to-exclude-posts-pages-or-categories-from-dynamic-choices/
 
 */
 
function wpf_dev_only_loggedin_user_posts( $args, $field, $form_id ) {
     
    // Only run this snippet on form ID 2519 & only on field ID 3
    if ( '2519' == $form_id && '3' == $field[ 'id' ] ) {
  
        // If the Dynamic Choices is set to Post Type
        // Look for and only display the posts that have been scheduled with a future date
        $args[ 'author' ] = get_current_user_id();
  
    }
     
    return $args;
  
}
  
add_filter( 'wpforms_dynamic_choice_post_type_args', 'wpf_dev_only_loggedin_user_posts', 10, 3 );

特定の投稿者IDからの投稿を表示する

/**
 * Only show posts from a particular author ID
 *
 * @link https://wpforms.com/developers/how-to-exclude-posts-pages-or-categories-from-dynamic-choices/
 */
 
function wpf_dynamic_choices_author( $args, $field, $form_id ) {
 
    // Only run on form ID 526
    if ( '526' == $form_id ) {
 
        // The author ID is equal to 9
        $args[ 'author' ] = '9';
    }
 
    return $args;
 
}
 
add_filter( 'wpforms_dynamic_choice_post_type_args', 'wpf_dynamic_choices_author', 10, 3 );

子カテゴリのみを表示する

/**
 * Display only child categories
 *
 * @link https://wpforms.com/developers/how-to-exclude-posts-pages-or-categories-from-dynamic-choices/
 */
function wpf_dev_dynamic_choices_include( $args, $field, $form_id ) {
 
    if ( is_array( $form_id ) ) {
        $form_id = $form_id[ 'id' ];
    }
 
    // Only on form #122 and field #11
    if ( $form_id == 122 && $field[ 'id' ] == 11 ) {
 
    // Category IDs to include - 87 is parent; 88 and 89 are child categories of this parent
        $args[ 'include' ] = '87,88,89';
    }
 
    return $args;
 
}
 
add_filter( 'wpforms_dynamic_choice_taxonomy_args', 'wpf_dev_dynamic_choices_include', 10, 3 );

よくある質問

Q: WooCommerceのカテゴリ用にこれをカスタマイズするにはどうすればよいですか?

A: WooCommerceのタクソノミーの場合、チェックボックスドロップダウン、または複数選択フィールドの[高度]タブで、ダイナミック選択肢商品に設定し、ダイナミックタクソノミーソース商品カテゴリを選択します。

次に、特定のカテゴリのみを含めたい場合は、上記と同じ方法でIDを見つけます。WordPress管理画面で、左側のWordPress管理メニューの[商品]の下にある[カテゴリ]をクリックします。IDが必要な各商品カテゴリをクリックします。URLは次のようになります。
?taxonomy=product_cat&tag_ID=90&post_type=product&wp_http_referer=%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dproduct_cat%26post_type%3Dproduct

この例では、ID番号は90になります。

したがって、スニペットは次のようになります。

/**
 * Include certain Woocommerce categories from dynamic choices.
 *
 * @link https://wpforms.com/developers/how-to-exclude-posts-pages-or-categories-from-dynamic-choices/
 */
   
function wpf_dev_dynamic_choices_exclude( $args, $field, $form_id ) {
   
    if ( is_array( $form_id ) ) {
        $form_id = $form_id[ 'id' ];
    }
   
    // Only on form #2620 and field #11
    if ( $form_id == 2620 && $field[ 'id' ] == 11 ) {
   
        // Product Category IDs to include
        $args[ 'include' ] = '90,95,98';
    }
   
    return $args;
   
}
   
add_filter( 'wpforms_dynamic_choice_taxonomy_args', 'wpf_dev_dynamic_choices_exclude', 10, 3 );

コードスニペットのフォームとフィールドIDを、お使いのフォームとフィールドID番号と一致するように変更することを忘れないでください。フォームとフィールドID番号を見つけるのにヘルプが必要な場合は、このチュートリアルを確認してください

Q: WooCommerceのカテゴリから特定の商品の表示のみを行うにはどうすればよいですか?

A: もちろんです。ダイナミック選択肢商品に設定し、ダイナミックタクソノミーソース商品カテゴリを選択します。

そして、商品カテゴリIDを使用する代わりに、名前を使用します。

/**
 * Include products from a specific category from dynamic choices.
 *
 * @link https://wpforms.com/developers/how-to-exclude-posts-pages-or-categories-from-dynamic-choices/
 */
  
function wpf_dev_dynamic_choices_exclude( $args, $field, $form_id ) {
  
    if ( is_array( $form_id ) ) {
        $form_id = $form_id[ 'id' ];
    }
  
    // Only on form #2620 and field #11
    if ( $form_id == 2620 && $field[ 'id' ] == 11 ) {
  
        // Category IDs to exclude
        $args[ 'product_cat' ] = 'Decor';
    }
  
    return $args;
  
}
  
add_filter( 'wpforms_dynamic_choice_post_type_args', 'wpf_dev_dynamic_choices_exclude', 10, 3 );

装飾は、私たちの商品カテゴリの名前です。ご自身のニーズに合わせて変更することを忘れないでください。

Q: カスタムタクソノミーからの投稿をWPFormsのドロップダウンフィールドに表示するにはどうすればよいですか?

A: カスタムタクソノミーからの投稿をWPFormsのドロップダウンフィールドに表示するには、ダイナミック選択肢の引数を変更する必要があります。現在、ドキュメントで提供されている例はカテゴリをカバーしています。ここでは、特定のタクソノミーから投稿を取得するようにコードをカスタマイズする方法を示す例を示します。

/**
 * Customize WPForms dynamic choices to show posts from a specific taxonomy.
 *
 * @link https://wpforms.com/developers/how-to-exclude-posts-pages-or-categories-from-dynamic-choices/
 */
 
function wpf_custom_dynamic_choices( $args, $field, $form_id ) {
 
    // For field #4 in form #25107012, only show entries in taxonomy term ID 8
    if ( '25107012' == $form_id && '4' == $field['id'] ) {
 
        $args[ 'tax_query' ] = array(
            array(
                'taxonomy' => 'samples', // Replace with your custom taxonomy
                'field'    => 'term_id',
                'terms'    => array( 8 ), // Replace with your term ID
            ),
        );
    }
 
    return $args;
 
}
add_filter( 'wpforms_dynamic_choice_post_type_args', 'wpf_custom_dynamic_choices', 10, 3 );

tax_query配列は、カスタムタクソノミー(この例ではサンプル)とタームID(この例では8)を指定するために使用されます。必要に応じて、「samples」と8を独自のタクソノミーとタームIDに置き換えてください。taxクエリの詳細については、WordPressのドキュメントを参照してください。

これで完了です!WPFormsで動的な選択肢をカスタマイズするさまざまな方法を学びました。

これらの同じフォームフィールドにフィールド値を追加する方法を知りたいですか?ドロップダウン、チェックボックス、複数選択フィールドのフィールド値の追加方法の記事をご覧ください。

参照フィルター

wpforms_dynamic_choice_post_type_args