Zahlungsmethode ausblenden, wenn sich eine bestimmte Variante auf der Checkout-Seite | befindet WooCommerce

Lesezeit: 5 Minuten

Benutzer-Avatar
Schweta Arya

Ich verwende diesen Code auf meiner WordPress-Website, um das Zahlungsgateway auszublenden, wenn eine bestimmte Produktvariante ausgewählt wird. Sobald ich jedoch den Code einfüge, zeigt WordPress einen kritischen Fehler vom Backend an. Bitte helfen Sie mir bei der Verwendung dieses Codes auf meiner Website.

Produktattribut: Personalisierung Erforderliche Variablen: Ja| Nein

Ich möchte erreichen, dass die COD-Optionen auf der Checkout-Seite deaktiviert werden, wenn jemand eine „Ja“-Variante auswählt. Wenn sie alternativ „Nein“ auswählen, steht nur die Kabeljau-Option zur Verfügung.

URL der Produktseite: https://savvyandgroovy.com/product/prashant/

Dies ist, was ich derzeit verwende:

add_filter(‘woocommerce_available_payment_gateways’, ‘conditional_payment_gateways’, 10, 1);
function conditional_payment_gateways($available_gateways)
{
  $in_cart=false;
  foreach(WC()->cart->get_cart_contents() as $key=>$values)
  {
    // See if there is an attribute called ‘pa_size’ in the cart
    // Replace with whatever attribute you want
    if(array_key_exists(‘personalization-required’, (array)$values[‘data’]->get_attributes()))
    {
      foreach($values[‘data’]->get_attributes() as $attribute=>$variation) ;
      // Replace ‘small’ with your value.
      if($variation==‘Yes’) $in_cart=true; //edited
    }
  }
  if($in_cart)
    unset($available_gateways[‘cod’]); // unset ‘cod’

  return $available_gateways;
}

Benutzer-Avatar
Nirali Biniwale

Ihr Code funktioniert ordnungsgemäß, gibt jedoch aufgrund von Anführungszeichen, die Sie verwenden, einen Fehler aus. Ich habe es wie folgt aktualisiert:

add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
    $in_cart = false;
    
    if ( !empty(WC()->cart) ) {
        foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
        // See if there is an attribute called ‘pa_size’ in the cart
        // Replace with whatever attribute you want
        //echo '<pre>';
        //print_r($values['data']->get_attributes());
        //echo '</pre>';
        if (array_key_exists('personalization-required', (array) $values['data']->get_attributes() ) ) {
            foreach ($values['data']->get_attributes() as $attribute => $variation);
                // Replace ‘small’ with your value.
                // if ($variation == 'No') $in_cart = true; //edited
                if ($variation == 'Yes') {
                    $in_cart = true; //edited
                    // unset($available_gateways['cod']); // unset ‘cod’
                }
            }
        }
    
        if ( $in_cart )
            unset($available_gateways['cod']); // unset ‘cod’
    }

    return $available_gateways;
}

Ich möchte erreichen, dass die Kabeljau-Optionen auf der Checkout-Seite deaktiviert werden, wenn jemand eine „NEIN“-Variante auswählt. Wenn sie alternativ „JA“ auswählen, ist nur die Kabeljau-Option verfügbar.

Dies wird in Ihrem Code nicht umgekehrt funktionieren, da Sie geschrieben haben if ($variation == ‘Yes’) $in_cart = true; //edited Sie müssen es also auch aktualisieren. Damit habe ich auch den obigen Code aktualisiert.

  • Ein großes Dankeschön für eine prompte Antwort. Allerdings gibt es einige Verwirrung. 1) Ich möchte COD auf Ja deaktivieren. 2) Bei Nein werden alle Zahlungsgateways angezeigt/angezeigt.

    – Shweta Arya

    31. August 2021 um 9:33 Uhr

  • @ShwetaArya Bitte klären Sie meine Zweifel, damit ich Ihnen weiterhelfen kann: 1) Wenn ja – alle anderen Zahlungsgateways werden angezeigt und COD deaktiviert. Ist das richtig? 2) Wenn nein – einschließlich Nachnahme werden alle Zahlungsgateways angezeigt. Ist das richtig?

    – Nirali Biniwale

    31. August 2021 um 9:39 Uhr

  • Ja, du hast es sehr richtig verstanden. Ihr Verständnis ist sehr richtig …

    – Shweta Arya

    31. August 2021 um 9:56 Uhr

  • Okay, ich habe meine Antwort aktualisiert. Bitte prüfen Sie, ob Ihnen das weiterhilft. Ich habe es getestet und es funktioniert wie du es beschrieben hast.

    – Nirali Biniwale

    31. August 2021 um 10:07 Uhr

  • Ich danke dir sehr. Wo können wir Ihnen in den sozialen Medien folgen?

    – Shweta Arya

    31. August 2021 um 11:17 Uhr

Benutzer-Avatar
Martin Mirchev

Der obige Code ist nicht ganz vollständig, da das OP Zahlungs-Gateways in beiden Szenarien verbergen möchte, also passe ich nur die erste Antwort ein wenig an.

add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
    
    if( is_admin() ) 
        return $available_gateways;
    $hide_cod = $hide_rest = false;
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

        if($cart_item["variation"]["attribute_pa_personalization-required"] === 'no') {
            $hide_rest = true;
            
        }

        if($cart_item["variation"]["attribute_pa_personalization-required"] === 'yes') {
            $hide_cod = true;
        }
    }
    
    if($hide_cod) {
        unset($available_gateways['cod']);
    } 
    if($hide_rest) {
        unset($available_gateways['bacs']);
        unset($available_gateways['cheque']);
        unset($available_gateways['ppcp-gateway']);
        //etc
    }

    return $available_gateways;
}

Denken Sie daran, dass Sie keine Zahlungsmethode haben, wenn Sie beide Varianten in den Warenkorb legen.

  • Ein großes Dankeschön für eine prompte Antwort. Allerdings gibt es einige Verwirrung. 1) Ich möchte COD auf Ja deaktivieren. 2) Bei Nein werden alle Zahlungsgateways angezeigt/angezeigt.

    – Shweta Arya

    31. August 2021 um 9:33 Uhr

  • Nun, da Ihre ursprüngliche Frage lautet: “Ich möchte erreichen, dass die COD-Optionen auf der Checkout-Seite deaktiviert werden, wenn jemand eine ‘Ja’-Variante auswählt. Wenn er alternativ ‘Nein’ auswählt, ist nur die Cod-Option verfügbar.” Ich habe meine Antwort bearbeitet. Wenn Sie kein Zahlungsgateway verstecken möchten, kommentieren Sie es einfach oder löschen Sie es.

    – Martin Mirchev

    31. August 2021 um 11:40 Uhr

  • Ich entschuldige mich für die Verwirrung in der vorherigen Frage. Ich habe das //if($hide_rest) { // unset($available_gateways[‘bacs’]); // unset($available_gateways[‘cheque’]); // unset($available_gateways[‘ppcp-gateway’]); //etc Auch dann scheint der Code nicht zu funktionieren.

    – Shweta Arya

    1. September 2021 um 5:40 Uhr

  • Stellen Sie sicher, dass Sie nach der gleichen Variation oder Änderung nach Ihren Bedürfnissen suchen. Es wurde auf einer frischen WordPress-Installation mit der standardmäßigen Woocommerce-Installation und dem TwentyTwentyone-Design getestet. Funktioniert ohne Probleme. Wenn Sie Fehler oder ähnliches erhalten, geben Sie weitere Informationen ein.

    – Martin Mirchev

    1. September 2021 um 7:27 Uhr

  • Sie können savvyandgroovy.com/product/prashant überprüfen. Dies ist das Produkt. Ich verwende nur die gleiche Variante. Ich sehe keine Fehlermeldung als solche. Es ist nur so, dass COD nicht versteckt wird, wenn man ein Ja wählt.

    – Shweta Arya

    1. September 2021 um 9:39 Uhr

1017980cookie-checkZahlungsmethode ausblenden, wenn sich eine bestimmte Variante auf der Checkout-Seite | befindet WooCommerce

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy