WooCommerce Snippets

·

Si utilizas WooCommerce sabrás que es una de las herramientas para comercio electrónico más potentes que hay hoy en día en el mercado, sobre todo por su facilidad de implementar cambios y mejoras sin necesidad de tocar nada del propio código.

Hoy quiero dejar algunos códigos que incluyen funcionalidades muy útiles y que en principio no deberían ser muy complejos de implementar.

Upselling

remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 );
add_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_upsells', 15 );
if ( ! function_exists( 'woocommerce_output_upsells' ) )
{
  function woocommerce_output_upsells()
  {
    woocommerce_upsell_display( 6,3 ); // Mostrar 6 productos en filas de 3
  }
}

Con esto mejoraremos la forma de mostrar productos relacionados un poco más al gusto, y con la posibilidad de mejorar las ventas cruzadas.

Reemplazar el texto de «Sin Stock» por otro

add_filter('woocommerce_get_availability', 'availability_filter_func');
function availability_filter_func($availability)
{
  $availability['availability'] = str_ireplace('Out of stock', 'Sold', $availability['availability']);
  return $availability;
}

Con esto podemos cambiar el mensaje de «Out of Stock» por, por ejemplo, «Vendido». Muy útil si vendes productos de una unidad al ser artesanos o únicos.

Cambia el texto «Add to Cart» por «Product in cart»

add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text' );
function woo_custom_cart_button_text()
{
  global $woocommerce;
  foreach($woocommerce->cart->get_cart() as $cart_item_key => $values )
  {
    $_product = $values['data'];
    if( get_the_ID() == $_product->id )
    {
      return __('Already in cart - Add more?', 'woocommerce');
    }
  }
  return __('Add to cart', 'woocommerce');
}
add_filter( 'add_to_cart_text', 'woo_archive_custom_cart_button_text' );
function woo_archive_custom_cart_button_text()
{
  global $woocommerce;
  foreach($woocommerce->cart->get_cart() as $cart_item_key => $values )
  {
    $_product = $values['data'];
    if( get_the_ID() == $_product->id )
    {
      return __('Already in cart', 'woocommerce');
    }
  }
  return __('Add to cart', 'woocommerce');
}

Seguramente os ha pasado que comienzas a navegar por un sitio y añades al carrito, y sigues navegando y acabas en el mismo producto, vuelves a decir «me gusta» y lo vuelves a añadir al carrito… pues con esto, lo evitarás.

Añadir método de pago en el correo

add_action( 'woocommerce_email_after_order_table', 'add_payment_method_to_admin_new_order', 15, 2 );
function add_payment_method_to_admin_new_order( $order, $is_admin_email )
{
  if ( $is_admin_email )
  {
    echo '<p><strong>Payment Method:</strong> ' . $order->payment_method_title . '</p>';
  }
}

Gracias a esto, cuando llegue al correo del administrador el mensaje, indicará qué método de pago se ha utilizado.

Crear un shortcode [ sale_products ] con ofertas

add_shortcode('sale_products', 'woocommerce_sale_products');
function woocommerce_sale_products( $atts ) {
  global $woocommerce_loop;
  extract(shortcode_atts(array(
    'per_page' => '12',
    'columns'  => '4',
    'orderby'  => 'date',
    'order'    => 'desc'
  ), $atts));
  $woocommerce_loop['columns'] = $columns;
  $args = array(
    'post_type'           => 'product',
    'post_status'         => 'publish',
    'ignore_sticky_posts' => 1,
    'posts_per_page'      => $per_page,
    'orderby'             => $orderby,
    'order'               => $order,
    'meta_query'          => array(
      array(
        'key'             => '_visibility',
        'value'           => array('catalog', 'visible'),
        'compare'         => 'IN'
       ),
       array(
         'key'            => '_sale_price',
         'value'          => 0,
         'compare'        => '>',
         'type'           => 'NUMERIC'
       )
    )
  );
  query_posts($args);
  ob_start();
  woocommerce_get_template_part( 'loop', 'shop' );
  wp_reset_query();
  return ob_get_clean();
}

Sin palabras. Si quieres crear una sección de ofertas, solo has de crear la página, incluir el shortcode sale_products y aparecerán las ofertas del sitio. Puedes ajustar la ordenación y los detalles cambiando los datos del código.

Añade un producto al carrito, nada más visitarlo

add_action( 'init', 'add_product_to_cart' );
function add_product_to_cart()
{
  if ( ! is_admin() )
  {
    global $woocommerce;
    $product_id = 64;
    $found = false;
    if ( sizeof( $woocommerce->cart->get_cart() ) > 0 )
    {
      foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values )
      {
        $_product = $values['data'];
        if ( $_product->id == $product_id )
          $found = true;
      }
      if ( ! $found )
        $woocommerce->cart->add_to_cart( $product_id );
    } else {
      $woocommerce->cart->add_to_cart( $product_id );
    }
  }
}

Es posible que en algún caso quieras utilizar esto, de forma que el usuario vaya añadiendo elementos al carrito según vaya navegando por la web.

Si hay envío gratuito, elimina el resto

add_filter( 'woocommerce_available_shipping_methods', 'hide_all_shipping_when_free_is_available' , 10, 1 );
function hide_all_shipping_when_free_is_available( $available_methods )
{
  if( isset( $available_methods['free_shipping'] ) ) {
    $freeshipping = array();
    $freeshipping = $available_methods['free_shipping'];
    unset( $available_methods );
    $available_methods = array();
    $available_methods[] = $freeshipping;
  }
  return $available_methods;
}

Una pequeña mejora en la experiencia de usuario.

No son gran cosa, pero algunos de estos bloques de código se han convertido en pequeñas funciones o plugins que van de serie en algunos de los WooCommerce de clientes… y aquí quedan para quien los quiera usar.

Comments

4 respuestas a «WooCommerce Snippets»

  1. Avatar de Guillermo

    Hola amigo. Sabrías decirme qué debería agregar al functions.php para que desaparezcan los objetos del campo y el botón de los cupones para usuarios que no estén registrados? Es que lo hice con un condicional IF modificando el archivo cart.php pero me gustaría hacerlo en el functions. Más que nada por no perder la mejora cuando se actualice.
    Te agradecería mucho si me pudiese ayudar.
    Un saludo.

    1. Avatar de Javier Casares

      Lo primero es… si no vas a usar cupones de ningún tipo, directamente desactiva la funcionalidad:

      WooCommerce > Settings > Checkout

      En caso de querer desactivar los mensajes en el carrito o checkout… puedes usar algo tal que:

      <?php
      function disable_coupon_field_on_cart( $enabled ) {
      if ( is_cart() || is_checkout() ) $enabled = false;
      return $enabled;
      }
      add_filter( 'woocommerce_coupons_enabled', 'disable_coupon_field_on_cart' );

  2. Avatar de Guillermo

    Hola Javier. Muchas gracias por responder! Como no recibí ningún email confirmándome tu respuesta ni me enteré. Es que vendo a minoristas y los cupones sólo quiero que estén visibles para usuarios registrados. Al final encontré un código por ahí y lo pude acomodar. Es muy parecido al que tú me sugieres pero con otro condicional más para si el cliente está registrado.
    Gracias amigo. Un saludo. 😉

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *