recherche

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

Masquer les commandes de mon compte WooCommerce si le montant total de l'achat est de 0

<p>Dans woocommerce, j'essaie de masquer une commande si le total de la commande est de 0. Ci-dessous mon code mais il ne fonctionne pas. Des idées sur le problème ? </p> <pre class="brush:php;toolbar:false;">add_filter( 'woocommerce_my_account_my_orders_query', 'hide_zero_total_orders_from_my_account', 10, 1 ); fonction hide_zero_total_orders_from_my_account( $args ) { $args['meta_query'] = tableau( tableau( 'clé' => '_order_total', 'valeur' ​​=> 0, 'comparer' => '>', 'type' => 'NUMÉRIQUE', ), ); renvoie $args ; }</pré> <p><br /></p>
P粉545956597P粉545956597465 Il y a quelques jours524

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

  • P粉037450467

    P粉0374504672023-08-18 00:21:58

    Vous pouvez utiliser une requête SQL légère pour obtenir le montant total de l'achat du client et utiliser cette requête pour masquer la section "Mon compte commandes" si le montant total de l'achat est égal à 0 (zéro) :

    // 获取客户购买总金额
    function get_customer_purchases_total_amount(){
        global $wpdb;
    
        return (float) $$wpdb->get_var( $wpdb->prepare( "
            SELECT SUM(pm.meta_value)
            FROM {$wpdb->prefix}posts as p
            INNER JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
            INNER JOIN {$wpdb->prefix}postmeta as pm2 ON p.ID = pm2.post_id
            WHERE p.post_type = 'shop_order'
            AND p.post_status IN ('wc-processing','wc-completed')
            AND pm.meta_key = '_order_total'
            AND pm2.meta_key = '_customer_user'
            AND pm2.meta_value = %d
        ", get_current_user_id() ) );
    }
    
    // 有条件地隐藏“我的账户订单”部分
    add_filter( 'woocommerce_account_menu_items', 'hide_customer_account_orders_conditionally', 100, 1 );
    function hide_customer_account_orders_conditionally( $items ) {
        if ( get_customer_purchases_total_amount() == 0 ) {
            unset( $items['orders'] );
        }
        return $items;
    }
    

    Placez 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