Como personalizar opções dinâmicas no WPForms

Gostaria de personalizar as opções do Dynamic Choices para os seus campos Checkbox, Multiple Choice e Dropdown? Se estiver a utilizar as Opções dinâmicas mas pretender excluir mensagens, páginas ou categorias específicas, então este é o tutorial para si!

Os campos Múltiplas escolhas, Caixas de verificação e Menu pendente podem ser configurados para apresentar dinamicamente títulos de publicações ou páginas como Escolhas dinâmicas.

Por predefinição, quando as Opções dinâmicas estão activadas, são apresentados todos os itens publicados desse tipo de publicação ou taxonomia específica.

Por exemplo, quando a opção Escolhas dinâmicas está definida para Tipo de post e a Fonte de tipo de post dinâmico está definida para Posts, todos os posts publicados serão apresentados como opções de campo.

A utilização de opções dinâmicas para o tipo de publicação dos posts gera dinamicamente uma lista de todos os posts publicados no seu site.

Para o nosso tutorial, vamos apresentar um menu pendente de títulos de publicações gerados dinamicamente a partir do nosso sítio.

Criar o formulário

Para começar, vamos criar um formulário que capta o nome, o e-mail, a possibilidade de o visitante selecionar a publicação de que mais gostou e uma secção de comentários.

Por este motivo, vamos adicionar ao nosso formulário um campo de formulário Nome, Email, Menu pendente e Texto de parágrafo.

Depois de adicionar o campo Dropdown, clique em Advanced Options (Opções avançadas ) e, no menu suspenso Dynamic Choices (Opções dinâmicas ), clique em Post Type (Tipo de post). Isso abrirá outro menu suspenso para Fonte de tipo de post dinâmico. Quando vir este segundo menu pendente, selecione Posts no menu pendente e clique em Guardar no formulário.

Por predefinição, quando a opção Escolhas dinâmicas está activada utilizando o tipo de publicação Posts, são apresentadas todas as publicações publicadas.

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

Adicionar o snippet para incluir posts de uma única categoria

Pode até personalizar ainda mais estas opções utilizando trechos de código. É possível incluir apenas posts de uma determinada categoria ou até mesmo excluir posts de uma determinada categoria.

Por exemplo, no nosso tutorial, queremos mostrar apenas mensagens de uma categoria específica, pelo que o nosso fragmento de código será adicionado para preencher o nosso Dropdown apenas com mensagens 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 das suas categorias, consulte este tutorial.

Lembre-se de alterar o ID do formulário e do campo nos snippets de código para corresponder 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.

Limitar vários formulários para vários IDs de categoria

Sabia que também pode ter este fragmento 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 ID do formulário 363 para mostrar apenas os posts com o ID da categoria 11
  • ID do campo 20 do ID do formulário 225 para mostrar apenas os 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 );

Limitação por taxonomia

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

Se as Opções dinâmicas estiverem definidas para Taxonomia e a Fonte de taxonomia dinâmica estiver definida para Categorias, todas as categorias serão utilizadas para as opções de 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 utilizando 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 );

Este 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, apenas os posts, páginas, etiquetas ou categorias que definiu no seu snippet irão preencher o seu menu pendente.

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

Exibir apenas mensagens do utilizador atual com sessão iniciada

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

FAQs

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

R: Para as taxonomias do Woocommerce, no separador Avançadas do campo Caixa de verificação, Menu pendente ou Escolha múltipla, defina as Opções dinâmicas para Produto e, para a Fonte de taxonomia dinâmica, selecione Categorias de produtos.

Depois, se quiser incluir apenas categorias específicas, pode encontrar o ID da mesma forma 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 pretende o ID. O URL terá o seguinte aspeto:
?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

Por conseguinte, o 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 nos snippets de código para corresponder 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 é que posso mostrar apenas determinados produtos de uma categoria do Woocommerce?

R: Claro. Configuraria as suas Dynamic Choices paraProduct e, para a Dynamic Taxonomy Source, seleccionaria Product categories.

E, em vez de utilizar o ID da categoria do produto, utilizaria 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 produtos. Não se esqueça de o alterar para corresponder às suas necessidades.

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

R: Para exibir posts de uma taxonomia personalizada em um campo suspenso do WPForms, é necessário 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 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 tax_query é utilizada 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 obter mais informações sobre consultas de impostos, consulte a Documentação do WordPress.

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

Gostaria de saber como adicionar valores de campo a estes mesmos campos de formulário? Consulte o nosso artigo sobre Como adicionar valores de campo para campos de lista pendente, caixas de verificação e campos de escolha múltipla.

Filtro de referência

wpforms_dynamic_choice_post_type_args