¡Atención!

Este artículo contiene código PHP y está destinado a desarrolladores. Ofrecemos este código como cortesía, pero no proporcionamos soporte para personalizaciones de código o desarrollo de terceros.

Para obtener ayuda adicional, consulta el tutorial de WPBeginner sobre cómo añadir código personalizado.

Descartar

Cómo personalizar las opciones dinámicas en WPForms

¿Te gustaría personalizar las opciones de Opciones dinámicas para tus campos de Casilla de verificación, Opciones múltiples y Menú desplegable? Si estás utilizando Opciones dinámicas pero quieres excluir publicaciones, páginas o categorías específicas, ¡este es el tutorial para ti!

Los campos de Opciones múltiples, Casillas de verificación y Menú desplegable se pueden configurar para mostrar dinámicamente títulos de publicaciones o páginas como Opciones dinámicas.

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

Por ejemplo, cuando Opciones dinámicas se establece en Tipo de publicación y la Fuente de tipo de publicación dinámica se establece en Publicaciones, todas las publicaciones publicadas se mostrarán como opciones de campo.

El uso de opciones dinámicas para el tipo de publicación de posts generará dinámicamente una lista de todos los posts publicados en tu sitio.

Para nuestro tutorial, mostraremos un menú desplegable de títulos de publicaciones generados dinámicamente de nuestro sitio.

Creación del formulario

Para empezar, vamos a crear un formulario que capture el nombre, el correo electrónico, la capacidad del visitante para seleccionar qué publicación le gustó más y, a continuación, una sección de comentarios.

Por esta razón, agregaremos a nuestro formulario los campos de formulario Nombre, Correo electrónico, Menú desplegable y Párrafo de texto.

Una vez que hayas agregado el campo Menú desplegable, haz clic en Opciones avanzadas y en el menú desplegable Opciones dinámicas haz clic en Tipo de publicación. Esto mostrará otro menú desplegable para Fuente de tipo de publicación dinámica. Cuando veas este segundo menú desplegable, selecciona Publicaciones en el menú desplegable y haz clic en Guardar en el formulario.

Por defecto, cuando las Opciones Dinámicas están habilitadas usando el Tipo de Publicación de Posts, se mostrarán todos los posts publicados.

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

Añadir el fragmento de código para incluir publicaciones de una sola categoría

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

Por ejemplo, en nuestro tutorial, queremos mostrar solo publicaciones de una categoría específica, por lo que se agregará nuestro fragmento de código que solo completará nuestro Menú desplegable con publicaciones de la categoría 11.

Para obtener ayuda para agregar fragmentos de código a tu sitio, consulta 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 ID de tus categorías, consulta este tutorial.

Recuerda cambiar el ID de tu formulario y campo en tus fragmentos de código para que coincidan con el número de ID de tu formulario y campo. Si necesitas ayuda para encontrar los números de ID de tu formulario y campo, revisa este tutorial.

Limitar varios formularios para varios IDs de categoría

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

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

  • Campo ID 1 del formulario ID 363 para mostrar solo publicaciones con el ID de categoría 11
  • Campo ID 20 del formulario ID 225 para mostrar solo publicaciones 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 );

Limitar 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 están configuradas como Taxonomía y la Fuente de taxonomía dinámica está configurada como Categorías, se utilizarán todas las categorías para las opciones del campo.

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

Sin embargo, puedes excluir categorías específicas usando el fragmento de código a continuación.

/**
 * 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 los ID 4, 5, 6 y 11 de las opciones de elección dinámica. Si reemplazas exclude con include en el fragmento anterior, solo se mostrarán las categorías con los ID que hayas agregado.

Ahora solo los posts, páginas, etiquetas o categorías que hayas configurado en tu fragmento poblarán tu desplegable.

Mostrar solo publicaciones 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 );

Mostrar solo publicaciones del usuario actualmente conectado

/*
 * 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 autor específico por ID

/**
 * 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 solo categorías secundarias

/**
 * 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 taxonomías de Woocommerce, en la pestaña Avanzado de tu campo de Casilla de verificación, Menú desplegable o Opción múltiple, configura las Opciones dinámicas como Producto y, para la Fuente de taxonomía dinámica, selecciona Categorías de productos.

Luego, si solo quisieras incluir categorías específicas, encontrarías el ID de la misma manera que lo hiciste anteriormente. Desde el administrador de WordPress, haz clic en Categorías, que se encuentra bajo Productos en el menú de administración de WordPress de la izquierda. Haz clic en cada Categoría de producto de la que desees el ID. La URL se verá algo así:
?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 ejemplo, el número de ID sería 90

Por lo tanto, tu fragmento de código 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 );

Recuerda cambiar el ID de tu formulario y campo en tus fragmentos de código para que coincidan con el número de ID de tu formulario y campo. Si necesitas ayuda para encontrar los números de ID de tu formulario y campo, revisa este tutorial.

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

R: Por supuesto. Configurarías tus Opciones dinámicas como Producto y, para la Fuente de taxonomía dinámica, seleccionarías Categorías de productos.

Y en lugar de usar el ID de la categoría de producto, usarías 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 );

Decor es el nombre de nuestra Categoría de producto. Recuerda cambiar esto para que coincida con tus propias necesidades.

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

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

La matriz tax_query se utiliza para especificar la taxonomía personalizada (muestras en este ejemplo) y el ID del término (8 en este ejemplo). Deberías reemplazar 'samples' y 8 con tu propia taxonomía y ID de término según sea necesario. Para obtener más información sobre las consultas de impuestos, consulta la documentación de WordPress.

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

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

Filtro de Referencia

wpforms_dynamic_choice_post_type_args