Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save acanza/b6052e7d0c322ea250cbe1025795a1b5 to your computer and use it in GitHub Desktop.

Select an option

Save acanza/b6052e7d0c322ea250cbe1025795a1b5 to your computer and use it in GitHub Desktop.
Muestra determinados métodos de pago en función de la categoría del producto
// Muestra determinados métodos de pago en función de la categoría del producto
add_filter( 'woocommerce_available_payment_gateways', 'show_payment_gateways_based_on_products_categories', 1, 1 );
function show_payment_gateways_based_on_products_categories( $methods ){
$new_methods = $methods;
$products_categories_list = array( '' ); //---- Aquí debes introducir el listado de slugs de categorías de productos separados por coma.
$payment_gateways_list = array( '' ); //---- Aquí debes introducir el listado de IDs de métodos de pago permitidos para estos productos, por ejemplo; array( 'paypal', 'cod' )
$cart_content = WC()->cart->cart_contents;
foreach ( $cart_content as $key => $product ) {
if ( belongs_to_product_category( $product, $products_categories_list ) ) {
// Reset payment methods
$new_methods = array();
foreach ( $methods as $key => $payment_method ) {
if ( in_array( $key, $payment_gateways_list ) ) {
$new_methods[ $key ] = $payment_method;
}
}
break;
}
}
return $new_methods;
}
// Comprueba si un producto pertenece a un listado específico de categorías
function belongs_to_product_category( $product, $categories_list ){
$product_cats_slugs = array();
// Obtiene las categorías de producto a las que pertenece
$product_cats = wp_get_post_terms( $product[ 'product_id' ], 'product_cat' );
foreach ( $product_cats as $key => $term ) {
$product_cats_slugs[] = $term->slug;
}
// Chequea si las categorías del producto están en el listado
foreach ( $categories_list as $key => $category ) {
if ( in_array( $category , $product_cats_slugs ) ) {
return true;
}
}
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment