نمایش خرید محصول کاربر در یک سال گذشته در ووکامرس

نمایش خرید محصول کاربر در یک سال گذشته در ووکامرس

نمایش خرید محصول کاربر در یک سال گذشته در ووکامرس

شما براحتی میتوانید محصولات خریداری شده توسط کاربر در طی 1 سال گذشته را در صفحه جداگانه مورد بررسی قرار دهید.

برای نمایش خرید محصول کاربر در ووکامرس کافیست ابتدا کد زیر را در functions.php قرار دهید

function wc_customer_bought_product_last_365( $customer_email, $user_id, $product_id ) {
   global $wpdb;
 
    $result = apply_filters( 'woocommerce_pre_customer_bought_product', null, $customer_email, $user_id, $product_id );
 
    if ( null !== $result ) {
        return $result;
    }
 
    $transient_name = 'wc_cbp_' . md5( $customer_email . $user_id . WC_Cache_Helper::get_transient_version( 'orders' ) );
 
    if ( false === ( $result = get_transient( $transient_name ) ) ) {
        $customer_data = array( $user_id );
 
        if ( $user_id ) {
            $user = get_user_by( 'id', $user_id );
 
            if ( isset( $user->user_email ) ) {
                $customer_data[] = $user->user_email;
            }
        }
 
        if ( is_email( $customer_email ) ) {
            $customer_data[] = $customer_email;
        }
 
        $customer_data = array_map( 'esc_sql', array_filter( array_unique( $customer_data ) ) );
        $statuses      = array_map( 'esc_sql', wc_get_is_paid_statuses() );
 
        if ( sizeof( $customer_data ) == 0 ) {
            return false;
        }
 
        $result = $wpdb->get_col( "
            SELECT im.meta_value FROM {$wpdb->posts} AS p
            INNER JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id
            INNER JOIN {$wpdb->prefix}woocommerce_order_items AS i ON p.ID = i.order_id
            INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS im ON i.order_item_id = im.order_item_id
            WHERE p.post_status IN ( 'wc-" . implode( "','wc-", $statuses ) . "' )
            AND p.post_date > '" . date('Y-m-d', strtotime('-365 days')) . "'
            AND pm.meta_key IN ( '_billing_email', '_customer_user' )
            AND im.meta_key IN ( '_product_id', '_variation_id' )
            AND im.meta_value != 0
            AND pm.meta_value IN ( '" . implode( "','", $customer_data ) . "' )
        " );
        $result = array_map( 'absint', $result );
 
        set_transient( $transient_name, $result, DAY_IN_SECONDS * 30 );
    }
    return in_array( absint( $product_id ), $result );
}

برای نمایش کافیست از کد زیر استفاده نمایید

[wc_customer_bought_product_last_year]

لینک کوتاه:

https://a4fran3.ir/?p=17819

guest
0 نظر
Inline Feedbacks
مشاهده همه نظرات

مطالب مشابه