Cómo personalizar las opciones dinámicas en WPForms

¿Le gustaría personalizar las opciones de Opciones Dinámicas para sus campos Casilla de verificación, Opción múltiple y Desplegable? Si utiliza Opciones Dinámicas pero desea excluir entradas, páginas o categorías específicas, ¡este es su tutorial!

Los campos Opciones múltiples, Casillas de verificación y Desplegables pueden configurarse para mostrar dinámicamente títulos de entradas o páginas como Opciones dinámicas.

Por defecto, cuando se activa Opciones dinámicas, se mostrarán todos los elementos publicados de ese tipo de entrada o taxonomía específica.

Por ejemplo, cuando Opciones dinámicas está configurado como Tipo de entrada, y la Fuente de tipo de entrada dinámica está configurada como Entradas, todas las entradas publicadas se mostrarán como opciones de campo.

Si utiliza opciones dinámicas para el tipo de publicación de las entradas, se generará dinámicamente una lista de todas las entradas publicadas en su sitio.

Para nuestro tutorial, mostraremos un desplegable de títulos de entradas generados dinámicamente desde nuestro sitio.

Creación del formulario

Para empezar, vamos a crear un formulario que capture el nombre, el correo electrónico, la posibilidad de que el visitante seleccione la entrada que más le ha gustado y también una sección de comentarios.

Por este motivo, añadiremos a nuestro formulario los campos Nombre, Correo electrónico, Desplegable y Texto de párrafo.

Una vez que haya añadido el campo desplegable, haga clic en Opciones avanzadas y, en el menú desplegable Opciones dinámicas, haga clic en Tipo de entrada. Esto hará que aparezca otro menú desplegable para Dynamic Post Type Source. Cuando veas este segundo desplegable, selecciona Posts en el desplegable y haz clic en Save en el formulario.

Por defecto, cuando se activan las Opciones Dinámicas utilizando el Tipo de Entrada de Entradas, se mostrarán todas las entradas publicadas.

Si necesita ayuda para crear su formulario, consulte esta documentación.

Añadir el fragmento para incluir entradas de una sola categoría

Incluso puedes personalizar aún más estas opciones utilizando fragmentos de código. Puedes incluir sólo entradas de una categoría en particular o incluso excluir entradas de una categoría en particular.

Por ejemplo, en nuestro tutorial, queremos mostrar sólo los mensajes de una categoría específica, por lo que nuestro fragmento de código se añadirá que sólo poblar nuestro desplegable con mensajes de la categoría 11.

Si necesita ayuda para añadir fragmentos de código a su sitio, 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 el número de identificación de sus categorías, consulte este tutorial.

Recuerde cambiar su ID de formulario y campo en sus fragmentos de código para que coincidan con su número de ID de formulario y campo. Si necesita ayuda para encontrar sus números de ID de formulario y campo, consulte este tutorial.

Limitación de varios formularios para varios identificadores de categoría

¿Sabías que también puedes tener este fragmento de código para varios formularios y campos?

El código siguiente limita las opciones dinámicas dentro de dos formularios diferentes:

  • ID de campo 1 de ID de formulario 363 para mostrar sólo las entradas con el ID de categoría 11
  • ID de campo 20 de ID de formulario 225 para mostrar sólo las entradas de la categoría 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 );

Limitación por taxonomía

Una taxonomía es un término utilizado en WordPress para definir cosas como Categorías y Etiquetas.

Si las Opciones Dinámicas se establecen en Taxonomía, y la Fuente de Taxonomía Dinámica se establece en Categorías, todas las categorías se utilizarán para las opciones de campo.

También es posible excluir categorías al mostrar todas las taxonomías como opciones con el siguiente fragmento de código

Sin embargo, puede excluir categorías específicas utilizando el siguiente fragmento.

/**
 * 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 fragmento excluirá las categorías con IDs 4,5,6 y 11 de las opciones de elección dinámicas. Si sustituye exclude con include en el fragmento anterior, sólo mostrará las categorías con los ID que haya añadido.

Ahora sólo aparecerán en el desplegable las entradas, páginas, etiquetas o categorías que hayas definido en el fragmento.

Mostrar sólo los mensajes 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 );

Mostrar sólo los mensajes del usuario conectado actualmente

/*
 * 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 publicaciones de un ID de autor concreto

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

Mostrar sólo categorías de niños

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

Preguntas frecuentes

P: ¿Cómo puedo personalizar esto para una categoría de Woocommerce?

R: Para las taxonomías de Woocommerce, en la pestaña Avanzado de su casilla de verificación, desplegable o campo de opción múltiple, establezca las Opciones dinámicas en Producto, y para la Fuente de taxonomía dinámica, seleccione Categorías de productos.

Luego, si sólo desea incluir categorías específicas, encontrará el ID de la misma manera que lo hizo anteriormente. Desde la administración de WordPress, haga clic en Categorías que se encuentra en Productos en el menú de administración de WordPress a la izquierda. Haga clic en Categoría de productos desea el ID. La URL será algo parecido a esto:
?taxonomy=product_cat&tag_ID=90&post_type=product&wp_http_referer=%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dproduct_cat%26post_type%3Dproduct

En este ejemplo, el número de identificación sería 90

Por lo tanto, su fragmento sería el siguiente.

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

Recuerde cambiar su ID de formulario y campo en sus fragmentos de código para que coincidan con su número de ID de formulario y campo. Si necesita ayuda para encontrar sus números de ID de formulario y campo, consulte este tutorial.

P: ¿Cómo puedo mostrar sólo ciertos productos de una categoría de Woocommerce?

R: Por supuesto. Usted configuraría sus Opciones Dinámicas aProducto y para la Fuente de Taxonomía Dinámica, seleccionaría Categorías de Productos.

Y en lugar de utilizar el ID de la categoría de producto, utilizaría el nombre.

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

Decoración es el nombre de nuestra categoría de productos. Recuerde cambiarlo para adaptarlo a sus propias necesidades.

P: ¿Cómo puedo mostrar entradas de una taxonomía personalizada en un campo desplegable de WPForms?

R: Para mostrar entradas de una taxonomía personalizada en un campo desplegable de WPForms, necesita modificar los argumentos de elección dinámicos. Actualmente, los ejemplos proporcionados en nuestra documentación cubren categorías. Aquí hay un ejemplo que muestra cómo personalizar el código para obtener mensajes de una taxonomía 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 );

En tax_query se utiliza para especificar la taxonomía personalizada (muestras en este ejemplo) y el ID del término (8 en este ejemplo). Debe sustituir "samples" y 8 por su propia taxonomía e ID de término según sea necesario. Para obtener más información sobre las consultas de impuestos, consulte la página Documentación de WordPress.

¡Y eso es todo! Ahora ha aprendido las diversas formas de personalizar las opciones dinámicas en WPForms.

¿Le gustaría saber cómo añadir valores de campo para estos mismos campos de formulario? Eche un vistazo a nuestro artículo sobre Cómo añadir valores de campo para campos desplegables, casillas de verificación y campos de opción múltiple.

Filtro de referencia

wpforms_dynamic_choice_post_type_args