Atenção!

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

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

Ignorar

Como Personalizar Escolhas Dinâmicas no WPForms

Gostaria de personalizar as opções de Escolhas Dinâmicas para os seus campos de Caixa de Seleção, Escolha Múltipla e Menu Suspenso? Se estiver a usar Escolhas Dinâmicas mas quiser excluir publicações, páginas ou categorias específicas, então este é o tutorial para si!

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

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

Por exemplo, quando Escolhas Dinâmicas está definido como Tipo de Publicação e a Fonte de Tipo de Publicação Dinâmica está definida como Publicações, todas as publicações publicadas serão exibidas como escolhas de campo.

Utilizar escolhas dinâmicas para o tipo de publicação de publicações irá gerar dinamicamente uma lista de todas as publicações publicadas no seu site.

Para o nosso tutorial, exibiremos um menu suspenso de títulos de publicações gerados dinamicamente a partir do nosso site.

Criação do Formulário

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

Por esta razão, 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 Publicação. Isto apresentará outro menu suspenso para Fonte de Tipo de Publicação Dinâmica. Quando vir este segundo menu suspenso, selecione Publicações no menu suspenso e clique em Guardar no formulário.

Por defeito, quando as Escolhas Dinâmicas estão ativadas utilizando o Tipo de Publicação de Publicações, todas as publicações publicadas serão exibidas.

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

Adicionar o Snippet para Incluir Publicações de uma Única Categoria

Pode até personalizar ainda mais estas opções utilizando snippets de código. Pode incluir apenas publicações de uma categoria específica ou até excluir publicações de uma categoria específica.

Por exemplo, no nosso tutorial, queremos mostrar apenas publicações de uma categoria específica, pelo que o nosso snippet de código será adicionado para popular o nosso Menu Suspenso apenas com publicações da categoria 11.

Para obter ajuda na adição de snippets 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 ID das suas categorias, veja este tutorial.

Lembre-se de alterar o ID do seu formulário e campo nos seus snippets de código para corresponder ao número do ID do seu formulário e campo. Se precisar de ajuda para encontrar os números dos IDs dos seus formulários e campos, por favor reveja este tutorial.

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

Sabia que também pode ter este snippet 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 de Campo 1 do formulário ID 363 para exibir apenas publicações com o ID de categoria 11
  • ID de Campo 20 do formulário ID 225 para exibir apenas publicações 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 );

Limitar por Taxonomia

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

Se as Opções Dinâmicas estiverem definidas como Taxonomia e a Origem da Taxonomia Dinâmica estiver definida como Categorias, 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, 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 substituir exclude por include no trecho de código acima, apenas mostrará as categorias com os IDs que adicionou.

Agora, apenas as publicações, páginas, etiquetas ou categorias que definiu no seu trecho irão preencher a sua lista suspensa.

Exibir Apenas Publicações Futuras

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

Exibir Apenas Publicações do Utilizador Atualmente Ligado

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

Mostrar Publicações 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 );

Exibir 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 );

FAQs

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

R: Para taxonomias do Woocommerce, no separador Avançadas do seu campo Caixa de seleção, Menu suspenso ou Escolha múltipla, defina as Opções Dinâmicas como Produto, e para a Origem da Taxonomia Dinâmica, selecione Categorias de produtos.

Depois, se quisesse incluir apenas categorias específicas, encontraria o ID da mesma forma que fez acima. No painel de administração do WordPress, clique em Categorias, encontrado em Produtos no menu de administração do WordPress à esquerda. Clique em cada Categoria de Produto cujo ID pretende. O URL será algo como isto:
?taxonomy=product_cat&tag_ID=90&post_type=product&wp_http_referer=%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dproduct_cat%26post_type%3Dproduct

Para este exemplo, o número do ID seria 90

Portanto, o 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 nos seus snippets de código para corresponder ao número do ID do seu formulário e campo. Se precisar de ajuda para encontrar os números dos IDs dos seus formulários e campos, por favor reveja este tutorial.

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

R: Claro. Configuraria as suas Opções Dinâmicas para Produto e, para a Origem da Taxonomia Dinâmica, selecione Categorias de produtos.

E em vez de usar o ID da categoria do produto, 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 );

Decoração é o nome da nossa Categoria de Produto. Lembre-se de alterar isto para corresponder às suas próprias necessidades.

P: Como posso mostrar publicações de uma taxonomia personalizada num campo de menu suspenso do WPForms?

R: Para exibir publicações de uma taxonomia personalizada num campo de menu suspenso do WPForms, precisa de modificar os argumentos de escolha dinâmica. Atualmente, os exemplos fornecidos na nossa documentação cobrem categorias. Aqui está um exemplo que mostra como personalizar o código para obter publicações 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). Deve substituir 'samples' e 8 pela sua própria taxonomia e ID de termo, conforme necessário. Para mais informações sobre consultas de taxonomia, consulte a documentação do WordPress.

E é tudo! Aprendeu agora as várias formas de personalizar as escolhas dinâmicas no WPForms.

Gostaria de saber como adicionar valores de campo para estes mesmos campos de formulário? Dê uma vista de olhos ao nosso artigo sobre Como Adicionar Valores de Campo para Campos de Lista Suspensa, Caixas de Seleção e Escolha Múltipla.

Filtro de Referência

wpforms_dynamic_choice_post_type_args