Heim  >  Fragen und Antworten  >  Hauptteil

Verstecken Sie bestimmte Zahlungsmethoden für Neukunden in WooCommerce 8+

<p>Ich habe ein Skript erstellt, um zu überprüfen, ob der Benutzer eine abgeschlossene Bestellung hat. Hat der Nutzer keine abgeschlossene Bestellung, deaktiviert er die Zahlungsart „Scheck“. Dieses Skript funktioniert, aber nachdem ich es zu meiner Datei „functions.php“ hinzugefügt habe, treten beim Durchsuchen von Seiten schwerwiegende Leistungsprobleme auf. Sehen Sie Optimierungsmöglichkeiten oder wo könnte das Problem liegen? </p> <pre class="brush:php;toolbar:false;">function has_bought() { // Alle Kundenbestellungen abrufen $customer_orders = get_posts( array( 'numberposts' => -1, 'meta_key' => '_customer_user', 'meta_value' => get_current_user_id(), 'post_type' => 'shop_order', // Beitragstyp der WC-Bestellung 'post_status' => 'wc-completed' // Nur Bestellungen mit Status „abgeschlossen“ ) ); //Gib „true“ zurück, wenn der Kunde bereits eine Bestellung hat return count( $customer_orders ) > 0 : false; } add_filter('woocommerce_available_ payment_gateways', 'customize_ payment_gateways'); Funktion anpassen_zahlung_gateways($gateways) { if (!has_bought()) { if (isset($gateways['cheque'])) { // Das Zahlungsgateway „Scheck“ kündigen unset($gateways['cheque']); } } return $gateways; }</pre> <p><br /></p>
P粉199248808P粉199248808450 Tage vor547

Antworte allen(1)Ich werde antworten

  • P粉156415696

    P粉1564156962023-08-16 12:23:45

    不需要重复查询以检查客户是否有已支付的订单,WC_Customer类中已经有一个轻量级的内置功能,使用get_is_paying_customer()方法,该方法使用了一个专用于用户的元数据。

    您可以这样使用它,禁用新客户的“支票”付款方式:

    add_filter('woocommerce_available_payment_gateways', 'cheque_payment_gateway_only_for_paying_customers');
    function cheque_payment_gateway_only_for_paying_customers($gateways) {
        if ( ! WC()->customer->get_is_paying_customer() && isset($gateways['cheque']) ) {
            unset($gateways['cheque']); // 取消“支票”付款选项
        }
        return $gateways;
    }
    

    将代码放入您的子主题的functions.php文件中(或者插件中)。已测试并可正常工作。

    Antwort
    0
  • StornierenAntwort