Categorías
woocommerce

Como eliminar el rango de precios en woocommerce

En el archivo de funtions.php

function wc_eliminar_precio_mayor( $price, $product ) {
// Main Price
$prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( '%%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
// Sale Price
$prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) );
sort( $prices );
$saleprice = $prices[0] !== $prices[1] ? sprintf( __( '%%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
if ( $price !== $saleprice ) {
$price = '<del>' . $saleprice . '</del> <ins>' . $price . '</ins>';
}
return $price;
}
add_filter( 'woocommerce_variable_sale_price_html', 'wc_eliminar_precio_mayor', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'wc_eliminar_precio_mayor', 10, 2 );
Categorías
woocommerce

Cambiar estado del pedido en WooCommerce automáticamente

Insertar en funtions.php

// Actualiza automáticamente el estado de los pedidos a COMPLETADO
add_action( 'woocommerce_order_status_processing', 'actualiza_estado_pedidos_a_completado' );
add_action( 'woocommerce_order_status_on-hold', 'actualiza_estado_pedidos_a_completado' );
function actualiza_estado_pedidos_a_completado( $order_id ) {
    global $woocommerce;
    
    //ID's de las pasarelas de pago a las que afecta
    // bacs - Transferencia bancaria directa
    // cheque - Pagos por cheque
    // cod - Contra reembolso
    // redsys - Redsys redirección
    // paytpv - paycomet con Tarjeta
    $paymentMethods = array( 'bacs', 'cheque', 'cod', 'redsys' ,'paytpv' );
    
    if ( !$order_id ) return;
    $order = new WC_Order( $order_id );

    if ( !in_array( $order->payment_method, $paymentMethods ) ) return;
    $order->update_status( 'completed' );
}

El código anterior se activa en la página de agradecimiento, cuando el cliente ya ha finalizado la compra y se le muestra toda la información con el resumen de su pedido.

En ese momento, el código anterior toma el ID del pedido y automáticamente cambia su estado a Completado

Una vez activado el sniper, muy recomendado desactivar el envió de correo Procesando tu pedido, sino llegaran 2 email seguidos el de procesando y el de completado.

Para desactivarlo entrar en Panel de administración > WooCommerce > Ajustes > Emails > Procesando tu pedido y deshabilitarlo.

Con esto conseguirás que no se envíe el primer email.

Categorías
woocommerce

Convertir a modo catalogo woocommerce

Copiar en el fichero funtions.php (recomendable en un tema hijo)

// CONVIERTE EL WOOCOMMERCE EN MODO CATALOGO
// ELIMINA LOS BOTONES DE COMPRA
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
remove_action( 'woocommerce_simple_add_to_cart', 'woocommerce_simple_add_to_cart', 30 );
remove_action( 'woocommerce_grouped_add_to_cart', 'woocommerce_grouped_add_to_cart', 30 );
Categorías
woocommerce

Como eliminar/excluir provincias de los envíos en woocommerce

En nuestro fichero de funtions.php tendremos que añadir

function woo_eliminar_provincias ($provincias) {
   unset ($provincias ['ES'] ['TF']); // Tenerife
   unset ($provincias ['ES'] ['GC']); // Las Palmas
   unset ($provincias ['ES'] ['CE']); // Ceuta
   unset ($provincias ['ES'] ['ML']); // Melilla
   return $provincias;
   }

add_filter ('woocommerce_states', 'woo_eliminar_provincias');

Listado de provincias españolas utilizadas por woocomerce

CLa Coruña
VIÁlava
ABAlbacete
AAlicante
ALAlmería
OAsturias
AVÁvila
BABadajoz
BBarcelona
BUBurgos
CCCáceres
CACádiz
SCantabria
CSCastellón
CECeuta
CRCiudad Real
COCórdoba
CUCuenca
FOFormentera
GIGirona
GRGranada
GUGuadalajara
SSGipuzkoa
HHuelva
HUHuesca
IBIbiza
JJaén
LOLa Rioja
GCLas Palmas
LELeón
LLleida
LULugo
MMadrid
MAMálaga
PMMallorca
MLMelilla
MEMenorca
MUMurcia
NANavarra
OROurense
PPalencia
POPontevedra
SASalamanca
TFSanta Cruz de Tenerife
SGSegovia
SESevilla
SOSoria
TTarragona
TETeruel
TOToledo
VValencia
VAValladolid
BIBizkaia
ZAZamora
ZZaragoza
Categorías
woocommerce

Como personalizar la página de producto

Eliminar pestañas/tabs de la página de producto

Por defecto WooCommerce trae las siguientes pestañas o tabs:

  • Description, donde se muestra la descripción larga del producto.
  • Reviews, aquí aparecen las reseñas si las tienes activadas.
  • Aditional_information, muestra los atributos del producto.

Si deseas dejar alguna pestaña, puedes comentar la linea con // o directamente eliminarla

// Eliminar tabs
function woo_eliminar_tab($tab) {
  unset( $tab['description'] ); //Eliminar descripción larga
  unset( $tab['reviews'] ); // Eliminar las reseñas
  unset( $tab['additional_information'] ); // Eliminar información adicional
  return $tab;
}
add_filter( 'woo_eliminar_tab', 'woo_remove_product_tab', 98);

Añadir una pestaña con información extra

// Add tab
add_filter( 'woocommerce_product_tabs', 'woo_new_product_tab' );
function woo_new_product_tab( $tab ) {
  // Adds the new tab
  $tabs['envio_tab'] = array(
    'title'=> __('Título de la pestaña', 'woocommerce' ),
    'priority'=> 50,
    'callback'=> 'woo_new_product_tab_content'
  );
  return $tab;
}
// Añadir el contenido que va dentro de la nueva pestaña
function woo_new_product_tab_content() {
  echo '<h2>Gastos de envío gratis</h2>';
}

Mover los productos relacionados a una pestaña

// Eliminar los productos relacionados de su posición original
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);
// Agregar una nueva tab
add_filter( 'woocommerce_product_tabs', 'woo_new_product_tab' );
function woo_new_product_tab( $tabs ) {
  $tabs['related_products'] = array(
    'title'     => __( 'Título de la pestaña', 'woocommerce' ),
    'priority'  => 50,
    'callback'  => 'woo_new_product_tab_content'
  );
return $tabs;
}
// Añadir los productos relacionados a la pestaña
function woo_new_product_tab_content() {
  woocommerce_related_products();
}

Como cambiar el numero de productos relacionados

Modificaremos el número de posts_per_page por el numero que queramos de productos relacionados que salgan.

function woo_related_products_limit() {
  global $product;
  $args = array(
    'post_type' => 'product',
    'no_found_rows' => 1,
    'posts_per_page' => 3,
    'ignore_sticky_posts'=> 1,
    'orderby' => $orderby,
    'post__in' => $related,'post__not_in' => array($product->id)
  );
  return $args;
}
add_filter( 'woocommerce_related_products_args', 'woo_related_products_limit' );

Como modificar el orden de las pestañas

add_filter( 'woocommerce_product_tabs', 'woo_reorder_tabs', 98 );
function woo_reorder_tabs( $tabs ) {
  $tabs['reviews']['priority'] = 5; // Reseñas primera
  $tabs['additional_information']['priority'] = 10; // Información adicional la segunda
  $tabs['description']['priority'] = 15; // Descripción la tercera
  return $tabs;
}

Si hemos añadido alguna pestaña extra, tendremos que añadirla con el nombre de la pestaña que hallamos añadido, poniendo el ejemplo anterior, sería.

add_filter( 'woocommerce_product_tabs', 'woo_reorder_tabs', 98 );
function woo_reorder_tabs( $tabs ) {
  $tabs['reviews']['priority'] = 5; // Reseñas primera
  $tabs['additional_information']['priority'] = 10; // Información adicional la segunda
  $tabs['description']['priority'] = 15; // Descripción la tercera
  $tabs['envio_tab']['priority'] = 20; // Gastos de envio la cuarta
  return $tabs;
}

Como cambiar el titulo de las pestañas

add_filter( 'woocommerce_product_tabs', 'woo_rename_tabs', 98 );
function woo_rename_tabs( $tabs ) {
  $tabs['description']['title'] = __( 'Descripción' ); // Cambia el nombre de la pestaña Descripcion
  $tabs['reviews']['title'] = __( 'Reseñas' ); // Cambia el nombre de la pestaña valoraciones/reseñas
  $tabs['additional_information']['title'] = __( 'Otra información' ); // Cambia el nombre de la pestaña Informacion adicional
  return $tabs;
}

Cómo ocultar el número de referencia/SKU

add_filter( 'wc_product_sku_enabled', '__return_false' );

Como cambiar el número de miniaturas/thumbnails que aparece debajo de la imagen principal

Cambiaremos en número que hay detrás del return por el número de thumbnails que deseemos.

add_filter ( 'woocommerce_product_thumbnails_columns', 'xx_thumb_cols' );
function xx_thumb_cols() {
  return 3;
}

Como mostrar el número de unidades vendidas

add_action( 'woocommerce_single_product_summary', 'woo_product_sold_count', 11 );
function woo_product_sold_count() {
  global $product;
  $units_sold = get_post_meta( $product->id, 'total_sales', true );
  echo '<p>' . sprintf( __( 'Unidades vendidas: %%s', 'woocommerce' ), $units_sold ) . '</p>';
}
Categorías
woocommerce

¿Cómo ordenar las valoraciones en woocommerce?

  1. Entramos en el dashboard de wordpress.
  2. Pulsamos en Ajustes > Comentarios
  3. En Otros ajustes de comentarios, buscamos la opción de Los comentarios se mostrarán con los comentarios —— al principio de cada página.
  4. Donde podremos elegir entre más antiguos o más recientes, seleccionamos la opción que mas nos convenga y luego Guardar Cambios.
¿Como como ordenar las valoraciones en woocommerce?
Categorías
woocommerce

Ocultar el resto de gastos de envió, cuando el envió sea gratuito en woocommerce

Parece ser que existe un problema muy común, que surge cuando habilitas varios tipos de gastos de envío y habilitas la opción de gasto de envío gratuito cuando cumpla X condiciones.

Pues resulta que cuando se cumple los criterios para que el envío sea gratuito, woocommerce te da muestra una lista con todos los tipos de envíos disponibles, ¡incluido el envío gratuito!

Lo cual parece curioso, si ya es gratis el envio, para que mostrar la lista de los de pago, obviamente ningún cliente quiere pagar gastos de envío.

Y para mas inri, resulta que woocommerce, ofrece una solución un poco rara, ya que viene ocurriendo desde los inicios de woocommerce y es incluir una función dentro del tema hijo en funtions.php

O en su defecto utilizar un plugin de terceros WC Hide Shipping Methods

Versión WC 3.0+

/**
 * Hide shipping rates when free shipping is available.
 * Updated to support WooCommerce 2.6 Shipping Zones.
 *
 * @param array $rates Array of rates found for the package.
 * @return array
 */
 function my_hide_shipping_when_free_is_available( $rates ) {
 $free = array();
 foreach ( $rates as $rate_id => $rate ) {
 if ( 'free_shipping' === $rate->method_id ) {
 $free[ $rate_id ] = $rate;
 break;
 }
 }
 return ! empty( $free ) ? $free : $rates;
 }
 add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );

Versión WC 2.5

/**
 * woocommerce_package_rates is a 2.1+ hook
 */
 add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
 /**
 * Hide shipping rates when free shipping is available
 *
 * @param array $rates Array of rates found for the package
 * @param array $package The package array/object being shipped
 * @return array of modified rates
 */
 function hide_shipping_when_free_is_available( $rates, $package ) {
 // Only modify rates if free_shipping is present
 if ( isset( $rates['free_shipping'] ) ) {
 // To unset a single rate/method, do the following. This example unsets flat_rate shipping
 unset( $rates['flat_rate'] );
 // To unset all methods except for free_shipping, do the following
 $free_shipping = $rates['free_shipping'];
 $rates = array();
 $rates['free_shipping'] = $free_shipping;
 }
 return $rates;
 }
 

Versión < WC 2.5

/**
 * Hide ALL shipping options when free shipping is available and customer is NOT in certain states
 * Hide Free Shipping if customer IS in those states
 *
 * UPDATED FOR WOOCOMMERCE 2.1
 *
 * Change $excluded_states = array( 'AK','HI','GU','PR' ); to include all the states that DO NOT have free shipping
 */
 add_filter( 'woocommerce_package_rates', 'hide_all_shipping_when_free_is_available' , 10, 2 );
 /**
 * Hide ALL Shipping option when free shipping is available
 *
 * @param array $available_methods
 */
 function hide_all_shipping_when_free_is_available( $rates, $package ) {
 $excluded_states = array( 'AK','HI','GU','PR' );
 if( isset( $rates['free_shipping'] ) AND !in_array( WC()->customer->shipping_state, $excluded_states ) ) :
 // Get Free Shipping array into a new array
 $freeshipping = array();
 $freeshipping = $rates['free_shipping'];
 // Empty the $available_methods array
 unset( $rates );
 // Add Free Shipping back into $avaialble_methods
 $rates = array();
 $rates[] = $freeshipping;
 endif;
 if( isset( $rates['free_shipping'] ) AND in_array( WC()->customer->shipping_state, $excluded_states ) ) {
 // remove free shipping option
 unset( $rates['free_shipping'] );
 }
 return $rates;
 }