Posted on Leave a comment

Módulo Affiliates Pro para Prestashop

El módulo Affiliates Pro para Prestashop es el objetivo de este artículo, donde pretendo explicar brevemente su funcionamiento y características.

¿Qué es un sistema de afiliados?

Empezemos por el principio, que suele ser lo mejor. Un sistema de afiliados, es una forma de terner a cientos / miles de comerciales promocionando tu tienda online, a cambio de darles una comisión sobre las ventas o incluso darle una cantidad fija cuando un nuevo usuario se registra.
En este slider que he creado, podéis ver una breve introducción a estos sistemas.

Descargar en PDF.

¿Por qué Affiliates Pro de @itthinx?

Sobre todo, porque al ser parte del equipo de itthinx, he desarrollado yo personalmente parte del código y sé de primera mano, cómo está hecho. No se trata de publicidad, se trata estar orgulloso de tu trabajo.
Otro de los motivos principales por los que optar por Affiliates Pro para Prestashop, es la gran experiencia que tiene @itthinx en el desarrollo de sistemas de afiliados, con más de 7000 instalaciones activas de su versión para WordPress. Experiencia que hemos usado y trasladado a Prestashop, lo cual nos ha ayudado desde un primer momento a detectar necesidades de los usuarios de estos sistemas de afiliación.
A continuación voy a destripar un poco el módulo, para que sepáis usarlo de forma sencilla, y ayudaros en lo posible en su uso.
Antes de nada, ¿de quién estamos hablando?, pues si, tanto Affiliates Pro, Affiliates Pro y @itthinx, pero no os he dado los enlaces para presentaros, pues nada, os presento a itthinx.com y a nuestro módulo Affiliates Pro para Prestashop.

Instalación y configuración básica

Hechas las presentaciones, empezamos con una breve introducción al uso del módulo, y ya sabemos que un video ayuda más que 1000 palabras, por mucho que el SEO diga lo contrario.

<< VIDEO >>

De momento aquí se queda el artículo, ya que prefiero ir finalizándolo secuencialmente, asi que me pongo con el video. En cuanto lo tenga sigo redactando. Eso si, si tenéis alguna duda sobre su uso y demás, preguntad lo que necesiteis, a los de @itthinx nos gusta mucho hablar … y escuchar !!

Posted on Leave a comment

How to add menu in Prestashop

Vamos a añadir elementos en el menú principal de Prestashop.

Enlaces personalizados

El primer paso es ver y crear enlaces personalizados que podamos usar en el menú.

Desde la sección de Shop Parameters -> Traffic and SEO podemos ver un listado de direcciones preconfiguradas (contacto, marca, etc …), así como crear direcciones personalizadas.

 

 

Como ejemplo vamos a enlazar el área de afiliados del módulo Affiliates Pro, para posteriormente añadirlo al menú.

Seleccionamos la página del módulo, el título, la descripción, keywords y URL.

Una vez añadida, ya la tenemos disponible para añadirla al menú con un pretty link.

Añadir items al menú

Desde la sección de módulos, buscamos el módulo «Main menu».

 

En la configuración podemos añadir elementos entre los disponibles, así como eliminar alguno existente o cambiar el orden.

En los elementos disponibles, tenemos enlaces a lás páginas del CMS, categorías de productos, podemos buscar por productos, etc. Pero si necesitamos alguna más adicional, podemos usar la función de «Add a new link», para crear las nuestras propias.

Por ejemplo, para añadir un enlace al área de afiliados creada anteriormente, indicamos una etiqueta, y una url, donde la dirección será la usada cuando creamos los enlaces personalizados.

 

Una vez añadido, ya lo tenemos disponible en el listado superior para añadirlo al menú.

Tras guardar, ya podemos verlo en el menú.

 

The affiliates module used in this article is Affiliates Pro, available in the Addons Prestashop Store.

Posted on Leave a comment

Montar un sistema incremental de comisiones para afiliados

Sistema de afiliados

En este caso de uso vamos a ver cómo montar un sistema incremental de comisiones para afiliados en WordPress / Woocommerce.

Quien dice incremental, dice decremental, ya que podremos cambiar los porcentajes de comisiones según querramos.

¿Qué vamos a necesitar?

Para ello necesitaremos:

Vamos a ello

Primero

Primero montamos los grupos necesarios con Groups. En esta página de la documentación oficial podéis ver cómo hacerlo.

Segundo

A continuación, desde Affiliates, creamos los distintos ‘rates’ para los grupos. Esto lo haremos desde la sección Rates.

Tercero

Como último paso, vamos a configurar la integración Affiliates Groups by referrals. Para ello, desde Affiliates->Groups by referrals, elegimos el número de niveles, y para cada nivel, el grupo al que el usuario será añadido, y los límites monetarios que marcan cada nivel.

 

Affiliates Groups by referrals

 

Usando la imagen como referencia, podemos ver que se han definido 3 niveles:

Nivel 0: Cuando las ganancias son de 0€ a 1000€, el afiliado será añadido al grupo ‘Registered’.

Nivel 1: Para ganancias entre 1000€ y 2000€, el afiliado será automaticamente añadido a ‘Premium’

Nivel 2: Para ganacias mayores a 2000€, el afiliado será añadido a ‘VIP’

 

Con todo ellos, el afiliados irá pasando por los distintos grupos conforme vaya ganando comisiones, y según nuestra tabla de Rates en Affiliates, sus comisiones variarán. Ya tenemos montado nuestro sistema incremental de comisiones para afiliados, motivándolos a que generen más comisiones.

 

Posted on Leave a comment

Acciones Bulk para las categorías de productos de woocommerce

Groups Woocommerce Categories Bulk

Hoy he necesitado crear para una duda de un cliente, poder asignar grupos a categorías de productos en Woocommerce, que en principio, es sencillo, se van editando las categorías una por una, y se van asignando los grupos. El problema llega cuando el cliente me dice que tiene más de 200 categorías, e ir una a una es una pesadilla.
Por cierto, en este caso estoy hablando del plugin Groups de @itthinx.

Mirando documentación oficial y no oficial de WordPress, veo que hay filtros que podemos usar para añadir Bulk Actions a artículos y post types, pero no para las categorías (taxonomías).
La solución que opto, es crear un submenú en la administración de WordPress, mostrar ahí las categorías, los grupos, y que el usuario pueda seleccionarlos, para luego indicar si añadirlos o eliminarlos.

El plugin creado es: Groups Woo Categories Bulk, disponible en github.

Posted on Leave a comment

Descuentos en woocommerce según el tipo de cliente

Woocommerce Roles Pricing

Caso de uso: Descuentos en Woocommerce según el tipo de cliente.

Todos sabemos que no todos nuestros clientes son iguales. Tenemos el cliente que compra por primera vez, el que es reincidente, nuestra red de tiendas, si somos distribuidores, los comerciales, y un largo etcétera, en el que podemos meter familia y amigos.
Si queremos aplicar descuentos, o distintos precios a nuestros productos, según el tipo de cliente que nos compre, podemos agruparlos, según roles o grupos, y mediante el plugin Woocommerce Role Pricing Pro (para roles) o Woocommerce Groups Pricing Pro (para grupos), aplicar descuentos a los distintos productos.

En el siguiente video podemos ver la solución de este caso de uso usando el plugin Woocommerce Groups Pricing Pro. En el que disponemos de 2 grupos, Premium y VIP. Aplicamos un 10% de descuento al grupo Premium y un 15% al grupo VIP.

En este video podemos ver una configuración sencilla de Woocommerce Role Pricing:

Tanto el plugin basado en roles, como el basado en grupos, disponen de opciones de configuración muy similares, por lo que se pueden usar indistintamente según nuestro entorno.
En sus páginas de documentación ( roles y grupos ) se pueden consultar las distintas opciones de configuración.

¿Cómo crear roles personalizados?

WordPress viene con un conjunto reducido de roles predefinidos, por lo que si estamos usando la alternativa de Woocommerce Role Pricing Pro, basada en roles, necesitaremos crear algunos roles adicionales. Aunque hay muchas soluciones para crearlo, normalmente sugiero usar User Role Editor, plugin potente a la vez que sencillo de usar.

¿Cómo crear grupos?

En el caso de estar usando Woocommerce Groups Pricing Pro, los usuarios no serán agrupados según sus roles, sino por grupos, pudiendo crear tantos grupos como necesitemos. Necesitaremos del plugin Groups de itthinx. Aunque se trata de un plugin muy sencillo de utilizar, recomendamos echar un vistazo a la página de documentación de Groups.

Si necesitas ayudas con la instalación o configuración, no dudes en usar el sistema de comentarios e intentaré ayudarte en lo que pueda.

Posted on Leave a comment

Usando groups_can y groups_can_not con Visual Composer

Vamos a extender el elemento ‘vc_row’ para poder aplicar los shortcodes ‘groups_can’ y ‘groups_can_not’ del plugin Groups.

Ajustando la plantilla

Añadiremos las siguientes líneas al fichero functions.php de nuestro tema hijo de WordPress.

[php]
vc_add_param("vc_row", array(
"type" => "textfield",
"group" => "Groups",
"class" => "",
"heading" => "groups_can",
"param_name" => "groups_can",
‘description’ => ‘The capability attribute is required and is used to indicate one or more capabilities separated by comma.’
));
vc_add_param("vc_row", array(
"type" => "textfield",
"group" => "Groups",
"class" => "",
"heading" => "groups_can_not",
"param_name" => "groups_can_not",
‘description’ => ‘The capability attribute is required and is used to indicate one or more capabilities separated by comma.’
));
[/php]

Ahora, el elemento Columna tiene dos nuevos parámetros dentro de la pestaña ‘Groups’:

Cada elemento de Visual Composer tiene su plantilla de representación. En este caso vamos a sobrescribir vc_row.php desde nuestra plantilla hija.

1.- Crea una nueva carpeta “vc_templates” en tu tema hijo.

2.- Copia vc_row.php desde /wp-content/plugins/js_composer/includes/templates/shortcodes/ a la nueva carpeta creada en el tema hijo.

3.- Ahora vamos a cambiar el archivo vc_row.php, con este código:

[php]
<?php
if ( ! defined( ‘ABSPATH’ ) ) {
die( ‘-1’ );
}

/**
* Shortcode attributes
* @var $atts
* @var $el_class
* @var $full_width
* @var $full_height
* @var $equal_height
* @var $columns_placement
* @var $content_placement
* @var $parallax
* @var $parallax_image
* @var $css
* @var $el_id
* @var $video_bg
* @var $video_bg_url
* @var $video_bg_parallax
* @var $parallax_speed_bg
* @var $parallax_speed_video
* @var $content – shortcode content
* @var $css_animation
* Shortcode class
* @var $this WPBakeryShortCode_VC_Row
*/
$el_class = $full_height = $parallax_speed_bg = $parallax_speed_video = $full_width = $equal_height = $flex_row = $columns_placement = $content_placement = $parallax = $parallax_image = $css = $el_id = $video_bg = $video_bg_url = $video_bg_parallax = $css_animation = »;
$disable_element = »;
$output = $after_output = »;
$atts = vc_map_get_attributes( $this->getShortcode(), $atts );
extract( $atts );

wp_enqueue_script( ‘wpb_composer_front_js’ );

$el_class = $this->getExtraClass( $el_class ) . $this->getCSSAnimation( $css_animation );

$css_classes = array(
‘vc_row’,
‘wpb_row’,
//deprecated
‘vc_row-fluid’,
$el_class,
vc_shortcode_custom_css_class( $css ),
);

if ( ‘yes’ === $disable_element ) {
if ( vc_is_page_editable() ) {
$css_classes[] = ‘vc_hidden-lg vc_hidden-xs vc_hidden-sm vc_hidden-md’;
} else {
return »;
}
}

if ( vc_shortcode_custom_css_has_property( $css, array(
‘border’,
‘background’,
) ) || $video_bg || $parallax
) {
$css_classes[] = ‘vc_row-has-fill’;
}

if ( ! empty( $atts[‘gap’] ) ) {
$css_classes[] = ‘vc_column-gap-‘ . $atts[‘gap’];
}

$wrapper_attributes = array();
// build attributes for wrapper
if ( ! empty( $el_id ) ) {
$wrapper_attributes[] = ‘id="’ . esc_attr( $el_id ) . ‘"’;
}
if ( ! empty( $full_width ) ) {
$wrapper_attributes[] = ‘data-vc-full-width="true"’;
$wrapper_attributes[] = ‘data-vc-full-width-init="false"’;
if ( ‘stretch_row_content’ === $full_width ) {
$wrapper_attributes[] = ‘data-vc-stretch-content="true"’;
} elseif ( ‘stretch_row_content_no_spaces’ === $full_width ) {
$wrapper_attributes[] = ‘data-vc-stretch-content="true"’;
$css_classes[] = ‘vc_row-no-padding’;
}
$after_output .= ‘<div class="vc_row-full-width vc_clearfix"></div>’;
}

if ( ! empty( $full_height ) ) {
$css_classes[] = ‘vc_row-o-full-height’;
if ( ! empty( $columns_placement ) ) {
$flex_row = true;
$css_classes[] = ‘vc_row-o-columns-‘ . $columns_placement;
if ( ‘stretch’ === $columns_placement ) {
$css_classes[] = ‘vc_row-o-equal-height’;
}
}
}

if ( ! empty( $equal_height ) ) {
$flex_row = true;
$css_classes[] = ‘vc_row-o-equal-height’;
}

if ( ! empty( $content_placement ) ) {
$flex_row = true;
$css_classes[] = ‘vc_row-o-content-‘ . $content_placement;
}

if ( ! empty( $flex_row ) ) {
$css_classes[] = ‘vc_row-flex’;
}

$has_video_bg = ( ! empty( $video_bg ) && ! empty( $video_bg_url ) && vc_extract_youtube_id( $video_bg_url ) );

$parallax_speed = $parallax_speed_bg;
if ( $has_video_bg ) {
$parallax = $video_bg_parallax;
$parallax_speed = $parallax_speed_video;
$parallax_image = $video_bg_url;
$css_classes[] = ‘vc_video-bg-container’;
wp_enqueue_script( ‘vc_youtube_iframe_api_js’ );
}

if ( ! empty( $parallax ) ) {
wp_enqueue_script( ‘vc_jquery_skrollr_js’ );
$wrapper_attributes[] = ‘data-vc-parallax="’ . esc_attr( $parallax_speed ) . ‘"’; // parallax speed
$css_classes[] = ‘vc_general vc_parallax vc_parallax-‘ . $parallax;
if ( false !== strpos( $parallax, ‘fade’ ) ) {
$css_classes[] = ‘js-vc_parallax-o-fade’;
$wrapper_attributes[] = ‘data-vc-parallax-o-fade="on"’;
} elseif ( false !== strpos( $parallax, ‘fixed’ ) ) {
$css_classes[] = ‘js-vc_parallax-o-fixed’;
}
}

if ( ! empty( $parallax_image ) ) {
if ( $has_video_bg ) {
$parallax_image_src = $parallax_image;
} else {
$parallax_image_id = preg_replace( ‘/[^d]/’, », $parallax_image );
$parallax_image_src = wp_get_attachment_image_src( $parallax_image_id, ‘full’ );
if ( ! empty( $parallax_image_src[0] ) ) {
$parallax_image_src = $parallax_image_src[0];
}
}
$wrapper_attributes[] = ‘data-vc-parallax-image="’ . esc_attr( $parallax_image_src ) . ‘"’;
}
if ( ! $parallax && $has_video_bg ) {
$wrapper_attributes[] = ‘data-vc-video-bg="’ . esc_attr( $video_bg_url ) . ‘"’;
}
$css_class = preg_replace( ‘/s+/’, ‘ ‘, apply_filters( VC_SHORTCODE_CUSTOM_CSS_FILTER_TAG, implode( ‘ ‘, array_filter( array_unique( $css_classes ) ) ), $this->settings[‘base’], $atts ) );
$wrapper_attributes[] = ‘class="’ . esc_attr( trim( $css_class ) ) . ‘"’;

$output .= ‘<div ‘ . implode( ‘ ‘, $wrapper_attributes ) . ‘>’;

// @eggemplo changes
if ( isset ( $groups_can ) && ( strlen( trim( $groups_can ) ) > 0 ) ) {
$content = do_shortcode( ‘[groups_can capability="’ . $groups_can . ‘"]’ . ( $content ) . ‘[/groups_can]’ );
}
if ( isset ( $groups_can_not ) && ( strlen( trim( $groups_can_not ) ) > 0 ) ) {
$content = do_shortcode( ‘[groups_can_not capability="’ . $groups_can_not . ‘"]’ . ( $content ) . ‘[/groups_can_not]’ );
}
// end – @eggemplo changes

$output .= wpb_js_remove_wpautop ($content);
$output .= ‘</div>’;
$output .= $after_output;

echo $output;
[/php]

Esta es la parte de código que hemos cambiado:
[php]
// @eggemplo changes
if ( isset ( $groups_can ) && ( strlen( trim( $groups_can ) ) > 0 ) ) {
$content = do_shortcode( ‘[groups_can capability="’ . $groups_can . ‘"]’ . ( $content ) . ‘[/groups_can]’ );
}
if ( isset ( $groups_can_not ) && ( strlen( trim( $groups_can_not ) ) > 0 ) ) {
$content = do_shortcode( ‘[groups_can_not capability="’ . $groups_can_not . ‘"]’ . ( $content ) . ‘[/groups_can_not]’ );
}
// end – @eggemplo changes
[/php]

Espero que sirva de ayuda !!!

Posted on Leave a comment

Prestashop Cookies Law

Adapta tu tienda Prestashop a la ley europea sobre cookies.

Muestra el mensaje informando a tus clientes que el sitio web usa cookies, dándoles la posibilidad de aceptarlo o no.

Ahora compatible con Prestashop 1.7 !!.

[cws_button type=default size=medium link= ]Comprar[/cws_button]

Capturas de Pantalla:

 

Changelog:

1.5:

  • Compatible with Prestashop 1.7

1.4:

  • Added option for accept cookies automatically
  • Documentation Updated
  • Added Spanish translation.
  • Prestashop 1.6.x compatible.

1.2:

  • Bar is hidden even when the page does not reload.

1.1:

  • Revised prestashop 1.6.x compatibility
  • Fixed bug with pretty links
Posted on Leave a comment

Mostrar precio original y con descuento

Si estás usando Woocommerce Role Pricing o Woocommerce Groups Pricing, para aplicar descuentos en tu tienda Woocommerce según roles/grupos, y necesitas mostrar tanto el precio original como el descontado, puedes añadir este código a tu fichero functions.php:

Si estás usando Woocommerce 2.5.x


add_filter( 'woocommerce_get_price_html', 'your_own_price_html', 100, 2 );
function your_own_price_html( $price, $product ){
  $result = $price;

  if ( get_option( "wgp-baseprice", "regular" ) == "sale" ) {
    $price_key = '_price';
  } else {
    $price_key = '_regular_price';
  }

  if ( $product->product_type == 'variable' ) {

    $children = $product->get_children(true);

    $original_prices = array();
    $commission = 0;
    foreach ( $children as $child ) {
      $original_prices[] = get_post_meta( $child, $price_key, true );
      if ( $commission == 0 ) {
        $commission = WGP_Variations_Admin::get_commission( $product, $child );
      }
    }

    if ( $commission > 0 ) {
      $min_price = min( $original_prices );
      $max_price = max( $original_prices );
      $original_price = $min_price !== $max_price ? sprintf( _x( '%1$s–%2$s', 'Price range: from-to', 'woocommerce' ), wc_price( $min_price ), wc_price( $max_price ) ) : wc_price( $min_price );
    }
  } else {
    $commission = WooGroupPricing::get_commission( $product );
    if ( $commission ) {
      $original_price = woocommerce_price(get_post_meta( $product->id, $price_key, true ));
    }
  }

  if ( $commission ) {
    $result =  'Was:' . $original_price . " Now:" . $price;
  }
  return $result;
}

Si estás usando Woocommerce < 2.5.0


add_filter( 'woocommerce_get_price_html', 'your_own_price_html', 100, 2 );
function your_own_price_html( $price, $product ){
  $result = $price;
  if ( $product->is_type( 'variation' ) ) {
     $commission = WGP_Variations_Admin::get_commission( $product, $product->variation_id );
  } else {
     $commission = WooGroupPricing::get_commission( $product );
  }
  if ( $commission ) {
     $result =  'Was:' . woocommerce_price(get_post_meta( $product->id, '_price', true )) . " Now:" . $price;
  }
  return $result;
}
Posted on Leave a comment

Obtener nueva firma SHA-256 en TPVs Redsys

Los chicos de Redsys han decidido usar una firma más segura para sus conexiones, pasando a SHA-256. Para los que teníamos ya nuestros sistema usando el antiguo sistema SHA-1, tenemos hacer dos cosas:

– Actualizar nuestro plugin a una versión compatible. Nuestro plugin ya ha sido actualizado en la versión 2.0
– Obtener la nueva clave SHA-256 (de esto va este artículo)

Accedemos al portal del TPV.

redsys-login

Y al apartado de «Adm. TPV virtual»

redsys-panel

Accedemos a «Comercios»->Ver clave-> Mostrar clave

redsys-menu

Y la obtenemos de la ventana emergente que nos sale:

redsys-claves

Ya sólo tenemos que ponerla en la configuración del tpv, y estamos listos para usar nuestro sistema Redsys en Woocommerce.