Como personalizar opções dinâmicas no WPForms

Você gostaria de personalizar as opções do Dynamic Choices para seus campos Checkbox, Multiple Choice e Dropdown? Se estiver usando o Dynamic Choices, mas quiser excluir posts, páginas ou categorias específicas, este é o tutorial para você!

Os campos Múltiplas opções, Caixas de seleção e Menu suspenso podem ser configurados para exibir dinamicamente títulos de posts ou páginas como Opções dinâmicas.

Por padrão, quando a opção Dynamic Choices está ativada, todos os itens publicados desse tipo de postagem ou taxonomia específica serão exibidos.

Por exemplo, quando Dynamic Choices estiver definido como Post Type e a Dynamic Post Type Source estiver definida como Posts, todos os posts publicados serão exibidos como opções de campo.

O uso de opções dinâmicas para o tipo de postagem gerará dinamicamente uma lista de todas as postagens publicadas em seu site.

Em nosso tutorial, exibiremos um menu suspenso de títulos de publicações gerados dinamicamente em nosso site.

Criando o formulário

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

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

Depois de adicionar o campo Dropdown, clique em Advanced Options e, no menu suspenso Dynamic Choices, clique em Post Type. Isso abrirá outro menu suspenso para Dynamic Post Type Source. Quando você vir esse segundo menu suspenso, selecione Posts no menu suspenso e clique em Save (Salvar) no formulário.

Por padrão, quando a opção Dynamic Choices estiver ativada usando o Post Type of Posts, todas as postagens publicadas serão exibidas.

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

Adição do snippet para incluir posts de uma única categoria

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

Por exemplo, em nosso tutorial, queremos mostrar apenas publicações de uma categoria específica, portanto, nosso snippet de código será adicionado para preencher nosso Dropdown apenas com publicações da categoria 11.

Para obter ajuda sobre como adicionar 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 identificação de suas categorias, consulte este tutorial.

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

Limitação de vários formulários para várias IDs de categoria

Você sabia que também pode ter esse 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 da ID do formulário 363 para exibir apenas postagens com o ID da categoria 11
  • ID do campo 20 da ID do formulário 225 para exibir apenas posts do ID da categoria 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 );

Limitação por taxonomia

Uma taxonomia é um termo usado no WordPress para definir coisas como categorias e tags.

Se as Opções dinâmicas estiverem definidas como Taxonomia e a Fonte de taxonomia dinâmica estiver definida como Categorias, todas as categorias serão usadas para as opções de campo.

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

No entanto, você pode excluir categorias específicas usando o snippet 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 );

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

Agora, somente os posts, as páginas, as tags ou as categorias que você definiu em seu snippet preencherão o menu suspenso.

Exibição apenas de 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 );

Exibição apenas de publicações do usuário conectado atual

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

Exibição de 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 );

Exibindo apenas categorias de crianças

/**
 * 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 guia Advanced (Avançado) do campo Checkbox, Dropdown ou Multiple Choice (Múltipla escolha ), defina Dynamic Choices (Opções dinâmicas ) como Product (Produto ) e, para Dynamic Taxonomy Source (Fonte de taxonomia dinâmica), selecione Product categories (Categorias de produtos).

Então, se você quiser incluir apenas categorias específicas, poderá encontrar o ID da mesma maneira que fez acima. No administrador do WordPress, clique em Categorias encontrado em Produtos no menu de administração do WordPress, à esquerda. Clique em cada Categoria do produto você deseja o ID. O URL terá a seguinte aparência:
?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 de identificação seria 90

Portanto, seu snippet 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 formulário e do campo em seus trechos de código para que correspondam ao número de ID do formulário e do campo. Se precisar de ajuda para encontrar os números de ID do formulário e do campo, consulte este tutorial.

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

R: Claro que sim. Você configuraria suas Dynamic Choices paraProduct e, para a Fonte de taxonomia dinâmica, selecionaria Categorias de produtos.

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 categoria de produto. Lembre-se de alterá-lo de acordo com suas próprias necessidades.

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

R: Para exibir publicações de uma taxonomia personalizada em um campo suspenso do WPForms, você precisa modificar os argumentos de escolha dinâmica. Atualmente, os exemplos fornecidos em nossa documentação abrangem categorias. Aqui está um exemplo que mostra como personalizar o código para buscar 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 tax_query é usada para especificar a taxonomia personalizada (amostras, neste exemplo) e a ID do termo (8, neste exemplo). Você deve substituir "samples" e 8 por sua própria taxonomia e ID de termo, conforme necessário. Para obter mais informações sobre consultas fiscais, consulte a seção Documentação do WordPress.

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

Você gostaria de saber como adicionar valores de campo para esses mesmos campos de formulário? Dê uma olhada em nosso artigo sobre Como adicionar valores de campo para campos suspensos, caixas de seleção e campos de múltipla escolha.

Filtro de referência

wpforms_dynamic_choice_post_type_args