Ocultar variaciones específicas

5 minutos de lectura

Avatar de usuario de Virik
Virik

¿Cómo puedo ocultar una variación del menú desplegable en la página de un producto, pero permitir que se compre a través de cupones de URL de WooCommerce?

Si hago que la variación no esté activa, se oculta en el menú desplegable, pero aparece el mensaje “Este producto no se puede comprar” en el carrito. Solo quiero ocultarlo de la lista, no deshabilitarlo por completo.

  • Aquí hay un enlace al producto. Gracias. Los atributos pueden variar de un producto a otro. Nos gustaría poder agregar múltiples atributos ocultos. natureventyr.no/vare-reisemal/egipto

    – Virik

    23 de agosto de 2017 a las 13:21

  • Esa no es una buena solución para nosotros. La mejor solución si pudiéramos ocultar todas las variables descargables de la lista desplegable y usar esa opción para los atributos ocultos.

    – Virik

    23 de agosto de 2017 a las 17:09

Avatar de usuario de James Jones
James Jones

La siguiente solución funcionó en mi tema, pero está ejecutando Bootstrap, por lo que puede tener problemas.

vamos a modificar el option etiqueta de las opciones que desea ocultar con el hidden atributo. Tome el siguiente código y agréguelo a su tema functions.php o un complemento personalizado:

Código personalizado

function custom_woocommerce_dropdown_variation_attribute_options_html( $html, $args )
{
    $product = $args[ 'product' ];
    $attribute = $args[ 'attribute' ];
    $terms = wc_get_product_terms( $product->get_id(), $attribute, array( 'fields' => 'all' ) );
    $options = $args[ 'options' ];
    if ( empty( $options ) && !empty( $product ) && !empty( $attribute ) ) {
        $attributes = $product->get_variation_attributes();
        $options = $attributes[ $attribute ];
    }

    foreach ( $terms as $term ) {
        if ( in_array( $term->slug, $options ) && ***SOME CONDITION***) {
            $html = str_replace( '<option value="' . esc_attr( $term->slug ) . '" ', '<option hidden value="' . esc_attr( $term->slug ) . '" ', $html );
        }
    }
    return $html;
}
add_filter( 'woocommerce_dropdown_variation_attribute_options_html', 'custom_woocommerce_dropdown_variation_attribute_options_html', 10, 2 );

Tenga en cuenta que algunos navegadores no reconocen el hidden atributo. Si desea una compatibilidad total entre navegadores, querrá ver las respuestas en ¿Cómo ocultar una en un menú con CSS?. Agregar propiedad css style="display:none" también puede funcionar con algunos navegadores.

Campos personalizados avanzados

Ahora, en el código anterior, he escrito ***SOME CONDITION***. Esta condición debe verificar si una opción debe estar oculta o no. Para agregar esta información, necesitamos crear un campo personalizado para el atributo. Puede hacerlo manualmente, pero yo lo hago con el complemento de campos personalizados avanzados (ACF).

  1. Crear un atributo de producto en Productos->Atributos. Marque sí a ¿Habilitar archivos? y hazlo escribe “Seleccione”. A continuación, agregue los términos de atributo en Configurar términos.editar atributo de productotérminos de atributo de producto
  2. Instalar Campos personalizados avanzados en tu WordPress.
  3. Cree un nuevo grupo de campos.
  4. En el grupo de campo, cree una regla para Mostrar este grupo de campos si Taxonomy Term is equal to Product **your attribute**.
  5. En el grupo de campos, cree un campo con Etiqueta de campo=’oculto’, Tipo de campo=’Verdadero / Falso’ y establezca las otras configuraciones como desee.
  6. Grupo de campo Publicar/Actualizar.
  7. Vuelva a los términos que desea ocultar que creó en el paso 1. Debe tener una casilla de verificación para seleccionar si el atributo debe ocultarse o no. Marque todo lo que corresponda.casilla de verificación oculta del término
  8. Cree el producto variable con variaciones compuestas a partir de los atributos del producto.agregar atributo al productoañadir variación
  9. En el código personalizado, elimine ***SOME CONDITION*** y reemplazarlo con get_field( 'hidden', $term ) ). Esta es una función ACF que obtendrá el valor del campo ‘oculto’ para el término de ese atributo.

Después de todo eso, los términos que marcó como ocultos no deberían aparecer en el menú desplegable de la página del producto. En mi ejemplo se puede ver verde falta en el menú desplegable. menú desplegable con atributo oculto

  • Hola, gracias por esta respuesta detallada. No puedo seleccionar los atributos del producto en 3. No es una opción como esa.

    – Virik

    28 de agosto de 2017 a las 7:40

  • @Virik ¿Está creando un atributo de producto personalizado dentro del producto? Si es así, eso no funcionará. En el menú de administración de WordPress, debe ir a Products->Attributes y crear un atributo de tipo Seleccione. Luego usa eso para hacer variaciones en el producto variable. Debe ser seleccionable en el cuadro de reglas de Campos personalizados avanzados.

    –James Jones

    28 ago. 2017 a las 10:00

  • Agregué un atributo llamado “avgang” y agregué una variación a un producto en función de ese atributo, pero aún no hay ninguna opción en ACF. Puedes ver una captura de pantalla aquí: mementor.no/skisser/hidden-product.png

    – Virik

    28 de agosto de 2017 a las 12:37

  • @Virik Bien, encontré algo más que puede causar un problema. En las opciones para el atributo marque sí para Habilitar archivosHabilite esto si desea que este atributo tenga archivos de productos en su tienda. Esto hace que el atributo sea ‘público’ y, por lo tanto, seleccionable por ACF.

    –James Jones

    28 de agosto de 2017 a las 12:48

  • Excelente. Ahora ACF está configurado correctamente, pero no se muestra en la variación: mementor.no/skisser/variation.png

    – Virik

    28 de agosto de 2017 a las 13:16

Soy bastante nuevo aquí y en jugar con el código en general, pero usé css en el Personalizador para ocultar una variación llamada “Estudiante:”

.postid-403 option[value=Student]{display: none;}

postid-403 identifica la página de mi producto. Esto parece estar funcionando. ¿Alguna razón para no hacerlo de esta manera?

  • Porque ocultar opciones con CSS no es compatible con IE y, lo que es más importante, con Safari. (debería estar viendo su opción oculta en un Iphone)

    – Onur

    6 de junio de 2021 a las 17:45

¿Ha sido útil esta solución?