wp_schedule не работает ,, я хочу ежедневно отправлять электронную почту зарегистрированному пользователю в его день рождения

#php #email #auto #coupon

#php #Адрес электронной почты #авто #купон

Вопрос:

Я работаю над плагином для отправки электронной почты пользователю в его день рождения на ежедневной основе, но wp_schedule не работает. Я хочу отправить электронное письмо с купоном в его день рождения.

add_action(int) hook работает нормально, он создает купон и отправляет почту, но с расписанием он не работает. Как я могу сравнить дату рождения пользователя с текущей датой и отправить купон?

 public function user_checked_date_create_coupan() {
    global $woocommerce;
    // how many time send main 
    $coupon_send_times = 1;
    //today date 
    $today = date("Y-m-d");
    // get name of store user 
    $store_name = get_bloginfo('name');
    // store url 
    $store_url = get_bloginfo('url');
    // send mail before days
    $mail_before_days = get_option('coupan_before_days');
    // condition main before 
    if( $mail_before_days == 0 || empty($mail_before_days) )
      $mail_before_days = 0;
      /// get field date 
    $args = array(
      'meta_key' => 'dobc_date_field', 
    );
    
    $birthday_users = get_users($args);

    if( is_array($birthday_users) amp;amp; !empty($birthday_users) ) {
      foreach( $birthday_users as $birthday_user ) {
        $get_user_birthday = get_user_meta($birthday_user->data->ID, 'dobc_date_field', true );
        if( !empty($get_user_birthday) ) {
          $today = date("Y-m-d");
          $new_birthday_year = date('Y').'-'.$get_user_birthday;
          $date = date('Y-m-d', strtotime($new_birthday_year . " -".$mail_before_days." days"));
            // print_r($date);
            // exit();
          if( $today ==$get_user_birthday) {
          

            $user_info = get_userdata($birthday_user->data->ID);
            //check user is eligible for send birthday this time
            
            $check_coupon_year = get_user_meta($birthday_user->data->ID, 'coupon_year', true );
            if( empty($check_coupon_year) || $check_coupon_year == '' ) {
              $check_coupon_year = 0;
            }
            $check_coupon_year = intval($check_coupon_year);
            if( $coupon_send_times == 0 || $check_coupon_year <= $coupon_send_times ) {
              $user_email = $birthday_user->data->user_email;
              $username = $birthday_user->data->user_login;
              if( !empty($user_email) ) {
                //create coupon based on settings
                $code_length = get_option( 'dobc_code_length' );
                if( $code_length == '' )
                 $code_length = 12;
                 $prefix = get_option( 'dobc_prefix' );
                 $code = $prefix . strtoupper( substr( str_shuffle( md5( time() ) ), 0, $code_length ) );
                 $type = get_option( 'dobc_dis_type' );
                 $amount = get_option( 'dobc_amount' );
                 $product_ids = get_option( 'select_product' );
                 $allowed_products = '';
                if ( is_array( $product_ids ) ) {
                  foreach ( $product_ids as $product_id ) {
                    $product = wc_get_product( $product_id );
                    $allowed_products .= '<a href="'.$product->get_permalink().'">'.$product->get_title().'</a>,';
                  }
                  $allowed_products = rtrim( $allowed_products, ',' );
                  $product_ids = implode( ',', $product_ids );
                }
                $product_categories = get_option( 'dobc_categories' );
                $allowed_cats = '';
                if ( is_array( $product_categories ) ) {
                  foreach ( $product_categories as $cat_id ) {
                    $cat = get_term_by( 'id', $cat_id, 'product_cat' );
                    $allowed_cats .='</br>'. '<a  href="'.get_term_link( $cat->slug, 'product_cat' ).'">'.$cat->name.'</a>,'.'</br>';
                  }
                  $allowed_cats = rtrim( $allowed_cats, ',' );
                    ////
                  ///
                }
                else
                $product_categories = array();
                $days = get_option( 'dobc_days' );
                $date = '';
                $expire = '';
                $format = get_option( 'dobc_date_format' ) == '' ? 'jS F Y' : get_option( 'dobc_date_format' );
                    
                if ( $days ) {
                  $date = date( 'Y-m-d', strtotime( ' '.$days.' days' ) );
                  $expire = date_i18n( $format, strtotime( ' '.$days.' days' ) );
                }
                $free_shipping = get_option( 'dobc_shipping' );
                $exclude_sale_items = get_option( 'dobc_sale' );
                $minimum_amount = get_option( 'dobc_min_purchas' );
                $maximum_amount = get_option( 'dobc_max_purchase' );
                $customer_email = '';
                if ( get_option( 'dobc_restrict' ) == 'yes' )
                  $customer_email = $user_email;
                //Add a new coupon when user registers
                $coupon = array(
                  'post_title' => $code,
                  'post_content' => '',
                  'post_status' => 'publish',
                  'post_author' => 1,
                  'post_type'     => 'shop_coupon'
                );
                $coupon_id = wp_insert_post( $coupon );
                //Add coupon meta data
                update_post_meta( $coupon_id, 'discount_type', $type );
                update_post_meta( $coupon_id, 'coupon_amount', $amount );
                update_post_meta( $coupon_id, 'individual_use', 'yes' );
                update_post_meta( $coupon_id, 'product_ids', $product_ids );
                update_post_meta( $coupon_id, 'usage_limit', '1' );
                update_post_meta( $coupon_id, 'usage_limit_per_user', '1' );
                update_post_meta( $coupon_id, 'limit_usage_to_x_items', '' );
                update_post_meta( $coupon_id, 'expiry_date', $date );
                update_post_meta( $coupon_id, 'apply_before_tax', 'no' );
                update_post_meta( $coupon_id, 'free_shipping', $free_shipping );
                update_post_meta( $coupon_id, 'exclude_sale_items', $exclude_sale_items );
                update_post_meta( $coupon_id, 'product_categories', $product_categories );
                update_post_meta( $coupon_id, 'minimum_amount', $minimum_amount );
                update_post_meta( $coupon_id, 'maximum_amount', $maximum_amount );
                update_post_meta( $coupon_id, 'customer_email', $customer_email );

                $search = array( '{COUPONCODE}', '{COUPONEXPIRY}', '{ALLOWEDCATEGORIES}',  '{ALLOWEDPRODUCTS}',  '{STORENAME}', '{STOREURL}');
                $replace = array( $code, $expire, $allowed_cats, $allowed_products,$username,  
                $store_name, $store_url );
                $subject = str_replace( $search, $replace, get_option( 'dobc_email_sub' ) );

                $body = str_replace( $search, $replace, get_option( 'email_body_id' ) );
                // $body = "<html><body><h1 class ='test'>( $body ); </h1></body></html>";
                $body = "<html><body><div style ='padding:10px 80px;'>( $body ); </div</body></html>";
                $user_id = get_current_user_id(); 
                $user_info = get_userdata($user_id);
                $to = $user_info->user_email;

                //////
                $message= $this->dobc_email_template( esc_html__( '', 'bobc' ) . get_option( 'dobc_email_sub'), $body );
                    // wp_mail( $user_email, esc_html( __(get_option( 'dobc_email_sub'), 'bobc' ) ), $body, $headers );
               // print_r($body);
                $headers = array('Content-Type: text/html; charset=UTF-8');
                         //////////////////
                 wp_mail( $to, $subject, $message, $headers );
                //mil send valid or mnoy 
                 //$sent = wp_mail($to, $subject, strip_tags($body), $headers);
                $new_coupon_year = $check_coupon_year   1;
                update_user_meta($birthday_user->data->ID, 'coupon_year', $new_coupon_year );
              }
            }
          }
        }
      }
    }
  }
  

Комментарии:

1. это функция wp_schedule

2. общедоступная функция schedule_activation(){ if(!wp_next_scheduled(‘schedule_run_job’)) { $checked_user_time_stemp = ’00:00′; wp_schedule_event(strtotime( date( ‘Y-m-d’ ) .’ ‘. $checked_user_time_stemp ), ‘ежедневно’, ‘ schedule_run_job’); }

3. общедоступная функция schedule_deactivation() { wp_clear_scheduled_hook(‘schedule_run_job’ ); wp_die(); }

4. register_activation_hook( ФАЙЛ , массив( $this, ‘schedule_activation’ )); register_deactivation_hook( ФАЙЛ , массив( $this, ‘schedule_deactivation’ )); add_action( ‘schedule_run_job’, массив($this, ‘woo_create_coupan_send_mail_call_back’));