Comment personnaliser les choix dynamiques dans WPForms

Vous souhaitez personnaliser les options de Choix Dynamiques pour vos champs de type Checkbox, Multiple Choice et Dropdown? Si vous utilisez les choix dynamiques mais que vous souhaitez exclure des articles, des pages ou des catégories spécifiques, ce tutoriel est fait pour vous !

Les champs Choix multiples, Cases à cocher et Liste déroulante peuvent être configurés pour afficher dynamiquement les titres des articles ou des pages en tant que Choix dynamiques.

Par défaut, lorsque l'option Choix dynamiques est activée, tous les éléments publiés de ce type d'article ou de cette taxonomie s'affichent.

Par exemple, lorsque l'option Choix dynamiques est définie sur Type de message et que l'option Source du type de message dynamique est définie sur Messages, tous les messages publiés seront affichés en tant que choix de champ.

L'utilisation de choix dynamiques pour le type d'article générera dynamiquement une liste de tous les articles publiés sur votre site.

Pour notre tutoriel, nous afficherons une liste déroulante de titres d'articles générés dynamiquement à partir de notre site.

Création du formulaire

Pour commencer, nous allons créer un formulaire qui saisit le nom, l'adresse électronique, la possibilité pour le visiteur de sélectionner l'article qu'il a préféré, ainsi qu'une section de commentaires.

C'est pourquoi nous ajouterons à notre formulaire des champs de type Nom, Email, Dropdown et Texte de paragraphe.

Une fois que vous avez ajouté le champ Dropdown, cliquez sur Advanced Options et dans le menu déroulant Dynamic Choices, cliquez sur Post Type. Une autre liste déroulante s'affiche alors, celle de la Source de type de message dynamique. Lorsque vous voyez cette deuxième liste déroulante, sélectionnez Posts dans la liste déroulante et cliquez sur Save dans le formulaire.

Par défaut, lorsque les choix dynamiques sont activés à l'aide du type de message "Messages", tous les messages publiés sont affichés.

Si vous avez besoin d'aide pour créer votre formulaire, veuillez consulter cette documentation.

Ajout de l'extrait pour inclure les articles d'une seule catégorie

Vous pouvez même personnaliser ces options en utilisant des extraits de code. Vous pouvez inclure uniquement les articles d'une catégorie particulière ou même exclure les articles d'une catégorie particulière.

Par exemple, dans notre tutoriel, nous voulons afficher uniquement les articles d'une catégorie spécifique, donc notre extrait de code sera ajouté pour ne remplir notre liste déroulante qu'avec les articles de la catégorie 11.

Pour obtenir de l'aide sur l'ajout d'extraits de code à votre site, veuillez consulter ce tutoriel.

/**
 * 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 );

Pour trouver le numéro d'identification de vos catégories, consultez ce tutoriel.

N'oubliez pas de modifier l'ID de votre formulaire et de votre champ dans vos extraits de code pour qu'il corresponde au numéro d'ID de votre formulaire et de votre champ. Si vous avez besoin d'aide pour trouver vos numéros d'identification de formulaire et de champ, veuillez consulter ce tutoriel.

Limitation de plusieurs formulaires pour plusieurs identifiants de catégorie

Saviez-vous que vous pouvez également utiliser cet extrait de code pour différents formulaires et champs ?

Le code ci-dessous limite les options dynamiques dans deux formulaires différents :

  • ID du champ 1 de l'ID du formulaire 363 pour n'afficher que les articles avec l'ID de la catégorie 11
  • ID du champ 20 de l'ID du formulaire 225 pour n'afficher que les articles de la catégorie 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 );

Limitation par taxonomie

Une taxonomie est un terme utilisé dans WordPress pour définir des éléments tels que les catégories et les balises.

Si l'option Choix dynamiques est définie sur Taxonomie et que la source de taxonomie dynamique est définie sur Catégories, toutes les catégories seront utilisées pour les choix de champ.

Il est également possible d'exclure les catégories lors de l'affichage de toutes les taxonomies en tant que choix avec l'extrait de code ci-dessous

Toutefois, vous pouvez exclure des catégories spécifiques à l'aide de l'extrait ci-dessous.

/**
 * 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 );

Ce snippet exclura les catégories avec les ID 4,5,6 et 11 des options de choix dynamiques. Si vous remplacez exclude avec include dans l'extrait ci-dessus, il n'affichera que les catégories avec les identifiants que vous avez ajoutés.

Désormais, seuls les articles, les pages, les étiquettes ou les catégories que vous avez définis dans votre extrait figureront dans votre liste déroulante.

Afficher uniquement les futurs messages

/*
 * 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 );

Afficher uniquement les messages de l'utilisateur actuellement connecté

/*
 * 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 );

Afficher les messages d'un auteur particulier

/**
 * 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 );

Afficher uniquement les catégories d'enfants

/**
 * 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 );

FAQ

Q : Comment puis-je personnaliser ceci pour une catégorie Woocommerce ?

R : Pour les taxonomies Woocommerce, dans l'onglet Avancé de votre champ à cases à cocher, à liste déroulante ou à choix multiples, réglez les choix dynamiques sur Produit, et pour la source de taxonomie dynamique, sélectionnez Catégories de produits.

Ensuite, si vous ne voulez inclure que des catégories spécifiques, vous trouverez l'ID de la même manière que vous l'avez fait ci-dessus. Dans l'interface d'administration de WordPress, cliquez sur Catégories trouvé sous Produits dans le menu d'administration de WordPress à gauche. Cliquez sur chaque Catégorie de produits vous voulez l'ID. L'URL ressemblera à ceci :
?taxonomy=product_cat&tag_ID=90&post_type=product&wp_http_referer=%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dproduct_cat%26post_type%3Dproduct

Dans cet exemple, le numéro d'identification est 90.

Par conséquent, votre extrait serait le suivant.

/**
 * 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 );

N'oubliez pas de modifier l'ID de votre formulaire et de votre champ dans vos extraits de code pour qu'il corresponde au numéro d'ID de votre formulaire et de votre champ. Si vous avez besoin d'aide pour trouver vos numéros d'identification de formulaire et de champ, veuillez consulter ce tutoriel.

Q : Comment afficher uniquement certains produits d'une catégorie Woocommerce ?

R : Bien sûr. Vous devez définir vos choix dynamiques surProduit et, pour la source de taxonomie dynamique, sélectionner les catégories de produits.

Au lieu d'utiliser l'ID de la catégorie de produits, vous utiliserez le nom.

/**
 * 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 );

Décor est le nom de notre catégorie de produits. N'oubliez pas de le modifier pour qu'il corresponde à vos propres besoins.

Q : Comment afficher les articles d'une taxonomie personnalisée dans un champ déroulant de WPForms ?

R : Pour afficher les articles d'une taxonomie personnalisée dans un champ déroulant WPForms, vous devez modifier les arguments du choix dynamique. Actuellement, les exemples fournis dans notre documentation couvrent les catégories. Voici un exemple qui montre comment personnaliser le code pour récupérer les articles d'une taxonomie spécifique.

/**
 * 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 );

Le tax_query est utilisé pour spécifier la taxonomie personnalisée (échantillons dans cet exemple) et l'ID du terme (8 dans cet exemple). Vous devez remplacer "samples" et 8 par votre propre taxonomie et votre propre identifiant de terme si nécessaire. Pour plus d'informations sur les requêtes fiscales, veuillez consulter la page Documentation sur WordPress.

Et c'est tout ! Vous avez maintenant appris les différentes façons de personnaliser les choix dynamiques dans WPForms.

Vous souhaitez savoir comment ajouter des valeurs à ces mêmes champs de formulaire ? Consultez notre article sur Comment ajouter des valeurs aux champs déroulants, aux cases à cocher et aux champs à choix multiples.

Filtre de référence

wpforms_dynamic_choice_post_type_args