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!

La función original “wc_customer_bought_product” en WooCommerce

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')) . "'

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir