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.
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 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).
- 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.
- Instalar Campos personalizados avanzados en tu WordPress.
- Cree un nuevo grupo de campos.
- En el grupo de campo, cree una regla para Mostrar este grupo de campos si
Taxonomy Term
is equal to
Product **your attribute**
. - 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.
- Grupo de campo Publicar/Actualizar.
- 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.
- Cree el producto variable con variaciones compuestas a partir de los atributos del producto.
- En el código personalizado, elimine
***SOME CONDITION***
y reemplazarlo conget_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.
-
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 archivos – Habilite 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
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