Vypnutie platobnej metódy pre kategóriu produktov

Obtiažnosť:
Začiatočník
Pokročilý
Skúsený
Expert

Niekedy sa dostanete do situácie, že potrebujete vypnúť určitú platobnú bránu pre produkty v špecifickej kategórii. Použiť sa to dá napríklad pri produktoch, ktoré je možné vyzdvihnúť iba osobne a nieje možné teda použiť napríklad dobierku.

Ak nepotrebujete zložitú funkcionalitu, najjednoduchším riešením je použitie hooku. V tomto prípade, potrebujeme použiť hook: woocommerce_available_payment_gateways. Tento hook poskytuje jednu premennú $available_gateways. V tejto premennej sú uložené dostupné platobné brány.

/**
 * Vypnutie platobnej brány, pre určitú kategóriu produktov
 * url: https://wp-admin.sk/woocommerce/vypnutie-platobnej-metody-pre-kategoriu-produktov/
 */
 
  
function viking_unset_gateway_by_category( $available_gateways ) {
  
  // pre administráciu neaplikovať
  if ( is_admin() )
    return $available_gateways;
  
  // ak nieje stránka pokladne -> neaplikovať
  if ( ! is_checkout() )
    return $available_gateways;
  
  
  $unset = false;
  $category_id = 8; // ID kategórie, pre ktorú chceme vypnúť platbu
  
  // loop cez položky v košíku
  foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
    
    // získanie kategórií produktu
    $terms = get_the_terms( $values['product_id'], 'product_cat' );
    
    // loop cez kategórie produktu
    foreach ( $terms as $term ) {
      
      // ak ID kategórie je rovnaké, pre ktorú chceme vypnúť platobnú kartu
      if ( $term->term_id == $category_id ) {
        $unset = true;
        break; // prerušenie cyklu
      }
      
    }
    
  }
  
  // ak je v košíku produkt s požadovanou kategóriou
  if ( $unset == true )
    unset( $available_gateways['cod'] ); // odstránenie platobnej metódy z poľa platobných metód
  
  return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'viking_unset_gateway_by_category' );

Vo funkcii najprv skontrolujeme, či sa nachádzame na front-ende ( ! is_admin() ), následne si overíme, či sme na stránke „checkout“ – pokladňa ( ! is_checkout() ).

V tomto prípade si do premennej $category_id uložíme ID kategórie, pre ktorú chceme platobnú bránu vypnúť.

Pomocou php funkcie foreach a triedy WC(), získame obsah košíka ( WC()->cart->get_cart_contents() ). Pre každý produkt v košíku získame jeho kategórie produktu ( get_the_terms() ).

Následne skontrolujeme každú kategóriu produktu, či ID kategórie sedí s našou kategóriou. Ak je ID zhodné, nastavíme si pomocnú premennú $unset na hodnotu true.
Takto zabezpečíme že aj v prípade, že v košíku máme jeden produkt z kategórie, kde chceme platobnú bránu vypnúť a ďalší z inej kategórie, platobná brána sa vypne.

Vypnutie platobnej metódy, zabezpečíme odstránením tejto metódy z poľa $available_gateways, použitím unset (v tomto prípade dobierku, COD <- je ID pre platobnú metódu Cash on delivery – dobierka).
Takto si vieme vypnúť akúkoľvek platobnú metódu, iba potrebujeme vedieť jej ID.


Tento snippet môžte pridať do functions.php, ale správne je vytvoriť si špecifický plugin pre túto úpravu. Viac info nájdete tu.

0 0 votes
Hodnotenie článku
Autor
Navigácia
Odoberať
Upozorniť na
guest
0 Komentáre
Inline Feedbacks
View all comments