wp_schedule无法正常工作,我想每天发送电子邮件以注册用户,生日那天

如何解决wp_schedule无法正常工作,我想每天发送电子邮件以注册用户,生日那天

我正在开发一个插件,每天在用户生日那天向用户发送电子邮件,但是wp_schedule无效。我想在他生日时发送附有优惠券的电子邮件。

add_action(int)挂钩正常工作,它创建了优惠券并发送了邮件,但按计划它不起作用。如何比较用户的出生日期和当前日期并发送优惠券?

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) && !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() ) ),$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','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,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,strip_tags($body),$headers);
                $new_coupon_year = $check_coupon_year + 1;
                update_user_meta($birthday_user->data->ID,$new_coupon_year );
              }
            }
          }
        }
      }
    }
  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-