WooCommerce: compruebe si el usuario ha comprado productos en los últimos 365 días

Hace algunos fragmentos, presentamos la función mágica incorporada de WooCommerce " wc_customer_bought_product ": automáticamente, con una sola línea de PHP, puede averiguar si el usuario ya ha comprado una ID de producto.
Pero cuando construí mi nueva sección #BloomerArmada , tenía que saber si un usuario compró una ID de producto en los últimos 365 días ... así que reescribí la función, cambié su nombre y le agregué una pequeña edición. ¡Fácil!

Fragmento de PHP: compruebe si el usuario ha comprado la identificación del producto en los últimos 365 días
/** * @snippet New version of "wc_customer_bought_product" function (last 365 days) * @how-to Get CustomizeWoo.com FREE * @author Rodolfo Melogli * @compatible WooCommerce 5 * @donate $9 https://businessbloomer.com/bloomer-armada/ */ 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 ); } [/php] |
Ahora que el "wc_customer_bought_product_last_year" existe en su functions.php, ¡puede usarlo en un fragmento o código abreviado! La única diferencia importante con "wc_customer_bought_product" es esta línea:
AND p.post_date > '" . date(' Y-m-d ', strtotime(' -365 days ')) . "' |
Subir
Deja una respuesta