WooCommerce: تحقق مما إذا كان المستخدم قد اشترى المنتج في آخر 365 يومًا

A VPN is an essential component of IT security, whether you’re just starting a business or are already up and running. Most business interactions and transactions happen online and VPN

منذ بضع مقتطفات ، قدمنا ​​وظيفة WooCommerce السحرية المضمنة في ثناياه عوامل ” wc_customer_bought_product ” – تلقائيًا ، مع سطر واحد من PHP ، يمكنك معرفة ما إذا كان المستخدم قد اشترى بالفعل معرّف منتج.

ولكن عند إنشاء قسم #BloomerArmada الجديد الخاص بي ، كان علي أن أعرف ما إذا كان المستخدم قد اشترى معرّف منتج في آخر 365 يومًا … لذلك أعدت كتابة الوظيفة ، وغيرت اسمها وأضفت القليل من التعديل عليها – سهل جدًا!

الوظيفة الأصلية “wc_customer_bought_product” في WooCommerce

مقتطف PHP: تحقق مما إذا كان المستخدم قد اشترى معرّف المنتج في آخر 365 يومًا

/**
 * @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]

الآن وبعد أن أصبح “wc_customer_bought_product_last_year” موجودًا في وظائفك .php ، يمكنك استخدامه في مقتطف أو رمز قصير! الاختلاف الرئيسي الوحيد مع “wc_customer_bought_product” هو هذا السطر:

AND p.post_date > '" . date('Y-m-d', strtotime('-365 days')) . "'

المنشورات ذات الصلة:

WooCommerce: تحديث Meta للمستخدم بعد طلب ناجح

أين تضيف هذا المقتطف؟

يمكنك وضع مقتطفات PHP في الجزء السفلي من ملف function.php القالب الفرعي الخاص بك (احذف “؟>” إذا كان لديك هناك). من ناحية أخرى ، ينتقل CSS في ملف style.css الخاص بسمة الطفل. تأكد من أنك تعرف ما تفعله عند تحرير مثل هذه الملفات – إذا كنت بحاجة إلى مزيد من الإرشادات ، فيرجى إلقاء نظرة على الفيديو التعليمي المجاني الخاص بي “أين تضع تخصيص WooCommerce؟”

هل هذا المقتطف (لا يزال) يعمل؟

يرجى إعلامي في التعليقات إذا كان كل شيء يعمل كما هو متوقع. يسعدني مراجعة المقتطف إذا أبلغت بخلاف ذلك (يرجى تقديم لقطات شاشة). لقد اختبرت هذا الكود مع موضوع Storefront وإصدار WooCommerce المذكور أعلاه واستضافة صديقة لـ وورد بريس على PHP 7.3.

إذا كنت تعتقد أن هذا الرمز وفر لك الوقت والمال ، فلا تتردد في الانضمام إلى أكثر من 14000 مشترك في WooCommerce Weekly للحصول على تحديثات منشورات المدونة أو أكثر من 250 من مؤيدي Business Bloomer لمدة 365 يومًا من مزايا WooCommerce . شكرا لكم مقدما 🙂

هل تحتاج إلى مساعدة في WooCommerce؟

تحقق من دروس الفيديو المجانية هذه. يمكنك تعلم كيفية تخصيص WooCommerce بدون مكونات إضافية غير ضرورية ، وكيفية تكوين إعدادات البرنامج المساعد WooCommerce بشكل صحيح وحتى كيفية إتقان استكشاف أخطاء WooCommerce في حالة حدوث خطأ!

توضيح

اي عملية نسخ او اقتباس او ترجمة او نقل تم لاغراض علمية وتدريبية وتعليمية بحته وقد تم انشاء هذا المحتوى بمعرفة خبراء في مجال التقنية اما عن طريق إنشاء او تحرير او نقل او نسخ او اقتباس او ترجمة المحتوى من مصادر خاصة او عامة وكل ذلك ضمن حقوق النشر المتعارف عليها.

اي أخطاء تظهر في المحتوى مهما كان نوعه او تصنيفه يمكنك تحرير رسالة فورية لادارة موثوق لاجل تصحيح هذه الاخطاء، وسنكون شاكرين لك في حال قمت بالتعاون معنا لاجل اصلاح هذه الاخطاء.

شاركنا رايك وتقييمك للموضوع

{{ reviewsTotal }}{{ options.labels.singularReviewCountLabel }}
{{ reviewsTotal }}{{ options.labels.pluralReviewCountLabel }}
{{ options.labels.newReviewButton }}
{{ userData.canReview.message }}