Ich habe ein Skript erstellt, das prüft, ob der Benutzer eine abgeschlossene Bestellung hat. Wenn der Benutzer keine abgeschlossenen Bestellungen hat, deaktiviert er die Zahlungsart „Scheck“. Diese Funktion funktioniert, aber nachdem ich sie zu meiner Datei „functions.php“ hinzugefügt habe, treten beim Durchsuchen der Seite schwerwiegende Leistungsprobleme auf. Sehen Sie Optimierungsmöglichkeiten oder wo könnte das Problem liegen?
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', // WC-Bestellartikeltyp 'post_status' => 'wc-completed' // Nur Bestellungen mit dem Status „abgeschlossen“ einbeziehen ) ); // „true“ zurückgeben, 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; }
不需要使用更重的查询来检查客户是否有付费订单,因为
WC_Customer
类中已经有一个轻量级的内置功能,使用get_is_paying_customer()
方法,该方法使用自定义的用户元数据,自WooCommerce版本5.8+起可用。您可以使用以下方式,为新客户禁用“支票”付款:
将代码放在您的子主题的functions.php文件中(或插件中)。已测试并可用。