Justo hoy he resuelto un problema de un cliente que tiene que aplicar los nuevos canon digital, vigentes desde el 1 de julio, a todos sus productos. Se trata de una tienda con WooCommerce y tiene multitud de referencia de productos digitales, con canon digital, pero que varían en base a la categoría (no es lo mismo el canon de un smarthpone que de una memoria USB por ejemplo).
Como el canon es algo que va relacionado con la categoría, se guarda el importe del canon digital, que es unitario por cada producto, en un meta dato de la categoría de producto. Luego usando la API de fees, que no sé si la conocéis pero es aplicar comisiones y recargos ajenos a los productos en el carrito y en finalizar compra; se aplica la totalidad del canon de cada línea del carrito.
Pero me ha surgido un problema, los productos, en ocasiones aparecen en varias categorías y claro, es posible que se diera el caso que un mismo producto tuviera diferentes cánones en diferentes categorías. ¿Qué haríamos en este caso? Pues elegir la categoría más específica. ¿Cuál es la más específica? Pues la subcategoría de mayor nivel. De forma que si tenemos el siguiente árbol de categorías:
Buscaríamos el canon específico primero en Serie Redmi, luego en Xiaomi y luego en Smartphones. La primera categoría que tuviera un canon aplicado, sería la que se usaría.
¿Y cómo sé en WooCommerce dado un identificador de producto cuáles son sus categoría ordenadas de más específicas a menos específicas? Pues con esta función.
function obtener_categorias_producto_ordenadas_por_profundidad( $product_id ){
$terms = get_the_terms( $product_id, 'product_cat' );
if( empty( $terms ) )
return array();
$depths = array();
foreach ($terms as $term) {
$depths[$term->term_id] = count( get_ancestors( $term->term_id, 'product_cat' ) );
}
arsort( $depths );
$categories = array();
foreach ($depths as $term_id => $depth) {
$categories[] = $term_id;
}
return $categories;
} Y bueno os explico de palabra cómo funciona:
Seguro que os sirve en algún desarrollo que tengáis que realizar.
Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.Por qué falla Bizum WooCommerce: detecta errores de credenciales, firma, entorno y pedidos para recuperar…
Elige un plugin gratuito Redsys WordPress con criterio: compatibilidad, seguridad, configuración bancaria y límites para…
¿Qué necesito para activar CECA Online? Revisa contrato bancario, datos del terminal, seguridad, pruebas y…
Aprende a elegir una pasarela para suscripciones en WordPress: revisa recurrencia, compatibilidad, seguridad y soporte…
Elige un plugin Bizum WordPress compatible con tu flujo de venta, configura la pasarela bancaria…
Aprende cómo aceptar CECA en reservas WordPress, configurar pagos seguros y confirmar cada reserva sin…