복붙노트

[WORDPRESS] 사용자가 이미 WooCommerce에서 현재 제품을 구입 한 경우 사용자 정의 텍스트를 표시합니다.

WORDPRESS

사용자가 이미 WooCommerce에서 현재 제품을 구입 한 경우 사용자 정의 텍스트를 표시합니다.

해결법


  1. 1.완전한 상태가있는 주문 만 대상으로 만 사용하려면 WC_CUSTOMER_BUGLAGE_Product () 소스 코드를 기반으로 다음 사용자 정의 조건 기능을 사용할 수 있습니다.

    완전한 상태가있는 주문 만 대상으로 만 사용하려면 WC_CUSTOMER_BUGLAGE_Product () 소스 코드를 기반으로 다음 사용자 정의 조건 기능을 사용할 수 있습니다.

    // Utility function to check if a customer has bought a product (Order with "completed" status only)
    function customer_has_bought_product( $product_id, $user_id = 0 ) {
        global $wpdb;
        $customer_id = $user_id == 0 || $user_id == '' ? get_current_user_id() : $user_id;
        $status      = 'wc-completed';
    
        if( ! $customer_id )
            return false;
    
        // Count the number of products
        $count = $wpdb->get_var( "
            SELECT COUNT(woim.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}woocommerce_order_items AS woi ON p.ID = woi.order_id
            INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id
            WHERE p.post_status = '$status'
            AND pm.meta_key = '_customer_user'
            AND pm.meta_value = $customer_id
            AND woim.meta_key IN ('_product_id','_variation_id')
            AND woim.meta_value = $product_id
        " );
    
        // Return a boolean value if count is higher than 0
        return $count > 0 ? true : false;
    }
    
    add_action( 'woocommerce_before_single_product_summary', 'woo_review_discount_message');
    function woo_review_discount_message() {
        global $product;
    
        if ( customer_has_bought_product( $product->get_id() ) && ! $product->is_type('variable') ) {
            $user = wp_get_current_user();
            echo '<div class="user-bought"><span style="color:#CA364D;font-weight:bold;font-size:18px;"><i class="wishlist-icon icon-heart-o"></i></span> Hi ' . $user->first_name . '! Please write a review below.</a></div>';
        }
    }
    

    코드는 Active Child Theme (또는 활성 테마)의 function.php 파일입니다. 테스트하고 작동합니다.

    고객이 로그인하지 않은 경우 아무 것도 표시되지 않습니다.

  2. from https://stackoverflow.com/questions/53048413/display-a-custom-text-if-user-has-already-bought-the-current-product-in-woocomme by cc-by-sa and MIT license