Atenção!

Este artigo contém código PHP e destina-se a desenvolvedores. Oferecemos este código como uma cortesia, mas não fornecemos suporte para personalizações de código ou desenvolvimento de terceiros.

Para orientação extra, consulte o tutorial do WPBeginner sobre como adicionar código personalizado.

Dispensar

Como Personalizar Escolhas Dinâmicas no WPForms

Você gostaria de personalizar as opções de Escolhas Dinâmicas para seus campos de Caixa de Seleção, Múltipla Escolha e Menu Suspenso? Se você está usando Escolhas Dinâmicas, mas deseja excluir posts, páginas ou categorias específicas, este tutorial é para você!

Os campos de Múltipla Escolha, Caixas de Seleção e Menu Suspenso podem ser configurados para exibir dinamicamente títulos de posts ou páginas como Escolhas Dinâmicas.

Por padrão, quando Escolhas Dinâmicas está ativado, todos os itens publicados desse tipo de post ou taxonomia específica serão exibidos.

Por exemplo, quando Escolhas Dinâmicas está definido como Tipo de Post e a Origem do Tipo de Post Dinâmico está definida como Posts, todos os posts publicados serão exibidos como opções de campo.

Usar escolhas dinâmicas para o tipo de postagem de posts gerará dinamicamente uma lista de todos os posts publicados em seu site.

Para o nosso tutorial, exibiremos um menu suspenso de títulos de posts gerados dinamicamente do nosso site.

Criação do Formulário

Para começar, vamos criar um formulário que capture o nome, e-mail, a capacidade do visitante de selecionar qual post ele mais gostou e, em seguida, uma seção de comentários também.

Por esse motivo, adicionaremos campos de formulário de Nome, E-mail, Menu Suspenso e Texto de Parágrafo ao nosso formulário.

Depois de adicionar o campo Menu Suspenso, clique em Opções Avançadas e, no menu suspenso Escolhas Dinâmicas, clique em Tipo de Post. Isso exibirá outro menu suspenso para Origem do Tipo de Post Dinâmico. Quando você vir este segundo menu suspenso, selecione Posts no menu suspenso e clique em Salvar no formulário.

Por padrão, quando Escolhas Dinâmicas é ativado usando o Tipo de Postagem de Posts, todos os posts publicados serão exibidos.

Se precisar de ajuda para criar seu formulário, por favor, revise esta documentação.

Adicionando o Trecho de Código para Incluir Posts de uma Única Categoria

Você pode até personalizar ainda mais essas opções usando trechos de código. Você pode incluir posts de uma categoria específica ou até mesmo excluir posts de uma categoria específica.

Por exemplo, em nosso tutorial, queremos mostrar apenas posts de uma categoria específica, então nosso trecho de código será adicionado para popular nosso Menu Suspenso apenas com posts da categoria 11.

Para obter ajuda na adição de trechos de código ao seu site, consulte este tutorial.

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

Para encontrar o número de ID das suas categorias, confira este tutorial.

Lembre-se de alterar o ID do seu formulário e campo em seus trechos de código para corresponder ao número de ID do seu formulário e campo. Se precisar de ajuda para encontrar os números de ID do seu formulário e campo, revise este tutorial.

Limitando Múltiplos Formulários para Múltiplos IDs de Categoria

Você sabia que também pode ter este trecho de código para vários formulários e campos?

O código abaixo limita as opções dinâmicas em dois formulários diferentes:

  • ID do campo 1 do formulário ID 363 para exibir apenas posts com o ID de categoria 11
  • ID do campo 20 do formulário ID 225 para exibir apenas posts da categoria 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 );

Limitando por Taxonomia

Uma taxonomia é um termo usado no WordPress para definir coisas como Categorias e Tags.

Se Dynamic Choices estiver definido como Taxonomy e Dynamic Taxonomy Source estiver definido como Categories, todas as categorias serão usadas para as opções do campo.

Também é possível excluir categorias ao mostrar todas as taxonomias como escolhas com o trecho de código abaixo

No entanto, você pode excluir categorias específicas usando o trecho de código abaixo.

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

Este trecho de código excluirá as categorias com os IDs 4, 5, 6 e 11 das opções de escolha dinâmica. Se você substituir exclude por include no trecho de código acima, ele mostrará apenas as categorias com os IDs que você adicionou.

Agora apenas os posts, páginas, tags ou categorias que você definiu em seu snippet irão popular seu dropdown.

Exibindo Apenas Posts Futuros

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

Exibindo Apenas Posts do Usuário Atualmente Logado

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

Mostrando Posts de um ID de Autor Específico

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

Exibindo Apenas Categorias Filhas

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

Perguntas Frequentes

P: Como posso personalizar isso para uma categoria do Woocommerce?

R: Para taxonomias do Woocommerce, na aba Avançado do seu campo Checkbox, Dropdown ou Multiple Choice, defina Dynamic Choices como Product e, para Dynamic Taxonomy Source, selecione Product categories.

Então, se você quisesse incluir apenas categorias específicas, você encontraria o ID da mesma forma que fez acima. No painel do WordPress, clique em Categories, encontrado em Products no menu do painel do WordPress à esquerda. Clique em cada Product Category cujo ID você deseja. A URL ficará parecida com esta:
?taxonomy=product_cat&tag_ID=90&post_type=product&wp_http_referer=%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dproduct_cat%26post_type%3Dproduct

Neste exemplo, o número do ID seria 90

Portanto, seu trecho de código seria o seguinte.

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

Lembre-se de alterar o ID do seu formulário e campo em seus trechos de código para corresponder ao número de ID do seu formulário e campo. Se precisar de ajuda para encontrar os números de ID do seu formulário e campo, revise este tutorial.

P: Como posso mostrar apenas certos produtos de uma categoria do Woocommerce?

R: Claro. Você configuraria seus Dynamic Choices como Product e, para Dynamic Taxonomy Source, selecionaria Product categories.

E em vez de usar o ID da categoria do produto, você usaria o nome.

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

Decor é o nome da nossa Product Category. Lembre-se de alterar isso para atender às suas próprias necessidades.

P: Como posso mostrar posts de uma taxonomia personalizada em um campo de dropdown do WPForms?

R: Para exibir posts de uma taxonomia personalizada em um campo de dropdown do WPForms, você precisa modificar os argumentos de escolha dinâmica. Atualmente, os exemplos fornecidos em nossa documentação cobrem categorias. Aqui está um exemplo que mostra como personalizar o código para buscar posts de uma taxonomia específica.

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

O array tax_query é usado para especificar a taxonomia personalizada (amostras neste exemplo) e o ID do termo (8 neste exemplo). Você deve substituir 'samples' e 8 pela sua própria taxonomia e ID de termo, conforme necessário. Para mais informações sobre tax queries, por favor, consulte a documentação do WordPress.

E é isso! Agora você aprendeu as várias maneiras de personalizar escolhas dinâmicas no WPForms.

Gostaria de saber como adicionar valores de campo para esses mesmos campos do formulário? Dê uma olhada em nosso artigo sobre Como Adicionar Valores de Campo para Campos de Dropdown, Checkboxes e Múltipla Escolha.

Filtro de Referência

wpforms_dynamic_choice_post_type_args