Attention !

Cet article contient du code PHP et est destiné aux développeurs. Nous fournissons ce code à titre de courtoisie, mais nous n'offrons pas de support pour les personnalisations de code ou le développement tiers.

Pour obtenir de l'aide supplémentaire, veuillez consulter le tutoriel de WPBeginner sur l'ajout de code personnalisé.

Ignorer

Comment personnaliser les choix dynamiques dans WPForms

Souhaitez-vous personnaliser les options de Choix dynamiques pour vos champs Cases à cocher, Choix multiples et Liste déroulante ? Si vous utilisez Choix dynamiques mais que vous souhaitez exclure des articles, pages ou 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 d’articles ou de pages comme Choix dynamiques.

Par défaut, lorsque Choix dynamiques est activé, tous les éléments publiés de ce type d’article ou de taxonomie spécifique s’affichent.

Par exemple, lorsque Choix dynamiques est défini sur Type d’article et que la Source de type d’article dynamique est définie sur Articles, tous les articles publiés s’affichent comme choix de champ.

L'utilisation des choix dynamiques pour le type de publication des articles 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 capture le nom, l’e-mail, la possibilité pour le visiteur de sélectionner l’article qu’il a le plus apprécié, puis une section commentaires.

Pour cette raison, nous ajouterons à notre formulaire des champs de formulaire Nom, E-mail, Liste déroulante et Texte de paragraphe.

Une fois que vous avez ajouté le champ Liste déroulante, cliquez sur Options avancées et dans la liste déroulante Choix dynamiques, cliquez sur Type d’article. Cela fera apparaître une autre liste déroulante pour Source de type d’article dynamique. Lorsque vous voyez cette deuxième liste déroulante, sélectionnez Articles dans la liste déroulante et cliquez sur Enregistrer sur le formulaire.

Par défaut, lorsque les Choix dynamiques sont activés en utilisant le Type de publication des articles, tous les articles publiés seront affichés.

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

Ajout de l’extrait pour inclure des articles d’une seule catégorie

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

Par exemple, dans notre tutoriel, nous voulons afficher uniquement les articles d’une catégorie spécifique, nous ajouterons donc notre extrait de code qui ne remplira 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 l’ID 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’ils correspondent à votre numéro d’ID de formulaire et de champ. Si vous avez besoin d’aide pour trouver vos numéros d’ID de formulaire et de champ, veuillez examiner ce tutoriel.

Limitation de plusieurs formulaires pour plusieurs ID de catégorie

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

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

  • ID de champ 1 du formulaire ID 363 pour afficher uniquement les articles de la catégorie ID 11
  • ID de champ 20 du formulaire ID 225 pour afficher uniquement 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 choses comme les Catégories et les Étiquettes.

Si les Choix dynamiques sont définis sur Taxonomie et la Source de taxonomie dynamique sur Catégories, toutes les catégories seront utilisées pour les choix du champ.

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

Cependant, vous pouvez exclure des catégories spécifiques en utilisant 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 );

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

Maintenant, seuls les articles, pages, tags ou catégories que vous avez définis dans votre extrait de code peupleront votre liste déroulante.

Afficher uniquement les articles futurs

/*
 * 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 articles 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 articles d'un ID d'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 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 cela pour une catégorie Woocommerce ?

R : Pour les taxonomies Woocommerce, dans l'onglet Avancé de votre champ Case à cocher, Liste déroulante ou Choix multiple, définissez les Choix dynamiques sur Produit, et pour la Source de taxonomie dynamique, sélectionnez Catégories de produits.

Ensuite, si vous ne souhaitez inclure que des catégories spécifiques, vous trouverez l'ID de la même manière qu'auparavant. Depuis l'administration WordPress, cliquez sur Catégories sous Produits dans le menu d'administration WordPress à gauche. Cliquez sur chaque Catégorie de produit dont vous souhaitez 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'ID serait 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’ils correspondent à votre numéro d’ID de formulaire et de champ. Si vous avez besoin d’aide pour trouver vos numéros d’ID de formulaire et de champ, veuillez examiner ce tutoriel.

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

R : Bien sûr. Vous définiriez vos Choix dynamiques sur Produit et pour la Source de taxonomie dynamique, vous sélectionneriez Catégories de produits.

Et au lieu d'utiliser l'ID de la catégorie de produit, vous utiliseriez 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écoration est le nom de notre Catégorie de produit. N'oubliez pas de le modifier pour qu'il corresponde à vos propres besoins.

Q : Comment puis-je afficher des articles d'une taxonomie personnalisée dans un champ de liste déroulante WPForms ?

R : Pour afficher des articles d'une taxonomie personnalisée dans un champ de liste déroulante WPForms, vous devez modifier les arguments de choix dynamiques. Actuellement, les exemples fournis dans notre documentation couvrent les catégories. Voici un exemple qui montre comment personnaliser le code pour récupérer des 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 tableau 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 devriez remplacer 'samples' et 8 par votre propre taxonomie et ID de terme si nécessaire. Pour plus d'informations sur les requêtes de taxonomie, veuillez consulter la documentation de WordPress.

Et voilà ! Vous avez maintenant appris les différentes manières de personnaliser les choix dynamiques dans WPForms.

Souhaitez-vous savoir comment ajouter des valeurs de champ pour ces mêmes champs de formulaire ? Consultez notre article sur Comment ajouter des valeurs de champ pour les champs de liste déroulante, cases à cocher et choix multiples.

Filtre de référence

wpforms_dynamic_choice_post_type_args