#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’));