Masquer les méthodes de paiement spécifiques pour les nouveaux clients dans WooCommerce 8+
P粉199248808
2023-08-15 21:47:22
<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>
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 :
Mettez le code dans le fichier function.php de votre thème enfant (ou dans un plugin). Testé et fonctionne bien.