Maison  >  Questions et réponses  >  le corps du texte

Masquer les méthodes de paiement spécifiques pour les nouveaux clients dans WooCommerce 8+

<p>J'ai créé un script pour vérifier 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 ». Ce script fonctionne, mais après l'avoir ajouté à mon fichier function.php, j'ai de graves problèmes de performances lors de la navigation dans les pages. Voyez-vous des possibilités d’optimisation ou où pourrait se situer le problème ? </p> <pre class="brush:php;toolbar:false;">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', // Publier le type de commande de WC 'post_status' => 'wc-completed' // 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 ; }</pré> <p><br /></p>
P粉199248808P粉199248808450 Il y a quelques jours545

répondre à tous(1)je répondrai

  • P粉156415696

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

    Pas besoin de répéter la requête pour vérifier si le client a une commande payée, WC_Customer类中已经有一个轻量级的内置功能,使用get_is_paying_customer()méthode, qui utilise une métadonnée propre à l'utilisateur.

    Vous pouvez l'utiliser ainsi pour désactiver le mode de paiement "Chèque" pour les nouveaux clients :

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

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

    répondre
    0
  • Annulerrépondre