Masquer des méthodes de paiement spécifiques est possible pour les nouveaux clients avec WooCommerce version 5.6+
P粉283559033
P粉283559033 2023-08-15 13:19:37
0
1
400

J'ai créé un script qui vérifie si l'utilisateur a une commande terminée. Si l'utilisateur n'a pas de commande finalisée, il désactive le mode de paiement « chèque ». Cette fonction fonctionne, mais après l'avoir ajoutée à mon fichier function.php, j'ai de graves problèmes de performances lors de la navigation sur la page. Voyez-vous des possibilités d’optimisation ou où pourrait se situer le problème ?

fonction has_bought() { // Récupère toutes les commandes des clients $customer_orders = get_posts( tableau( 'numéros' => -1, 'meta_key' => '_customer_user', 'meta_value' => get_current_user_id(), 'post_type' => 'shop_order', // Type d'article de commande WC 'post_status' => 'wc-completed' // Inclut uniquement les commandes avec le statut « terminé » ) ); // Renvoie "true" lorsque le client a déjà une commande return count( $customer_orders ) > 0 ? } add_filter('woocommerce_available_payment_gateways', 'customize_payment_gateways'); fonction personnaliser_payment_gateways($gateways) { si (!has_bought()) { if (isset($gateways['cheque'])) { // Annulation de la passerelle de paiement "chèque" unset ($gateways['chèque']); } } retourner $passerelles ; }
     
P粉283559033
P粉283559033

répondre à tous (1)
P粉985686557

Pas besoin d'utiliser des requêtes plus lourdes pour vérifier si un client a une commande payante grâce à la méthodeWC_Customer类中已经有一个轻量级的内置功能,使用get_is_paying_customer(), qui utilise des métadonnées utilisateur personnalisées et est disponible depuis la version 5.8+ de WooCommerce.

Vous pouvez désactiver les paiements « Chèque » pour les nouveaux clients en utilisant :

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; }

Placez le code dans le fichier function.php de votre thème enfant (ou dans un plugin). Testé et disponible.

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!