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.RedSys aparte de los pagos normales, llamados autorizaciones, acepta una variedad de operaciones: desde autorizaciones…
WooCommerce permite ordenar los productos de una forma nativa, para poder presentar primero los que…
Cada vez que hay una actualización grande del núcleo WordPress, por defecto WordPress te instala…
Una pantalla LCD es una pantalla delgada y hecha de cristal líquido. Se usa en…
De todos los plugins que existen para Gravity Forms, que son numerosos porque la propia…
Un CMS, como WordPress, facilita la creación y gestión de contenido en la web, sin…