Woocommerce订阅:添加触发器以自动更改下一个付款日期

时间:2020-10-20 23:28:27

标签: mysql wordpress woocommerce triggers woocommerce-subscriptions

我使用“ WooCommerce-Lite的产品交付日期”让客户决定何时收取其订购的第二笔款项。 此插件添加一个带有meta_key =“ _prdd_lite_date”和value =日期本身的“ wp_woocommerce_order_itemmeta”。

我在数据库中添加了一个触发器:

CREATE TRIGGER mytrigger
AFTER INSERT
ON wp_wc_order_product_lookup
FOR EACH ROW 
BEGIN
  SET @METAIDNEXT := '';
  SET @METAIDEND := '';
  SET @NEWDATE := '';
  SELECT pm1.meta_id INTO @METAIDNEXT FROM wp_postmeta pm1, wp_posts p1, wp_wc_order_product_lookup opl WHERE opl.order_item_id = NEW.order_item_id AND p1.post_parent = opl.order_id AND p1.ID = pm1.post_id AND pm1.meta_key = "_schedule_next_payment";
  SELECT pm1.meta_id INTO @METAIDEND FROM wp_postmeta pm1, wp_posts p1, wp_wc_order_product_lookup opl WHERE opl.order_item_id = NEW.order_item_id AND p1.post_parent = opl.order_id AND p1.ID = pm1.post_id AND pm1.meta_key = "_schedule_end";
  SELECT oim.meta_value INTO @NEWDATE FROM wp_woocommerce_order_itemmeta oim WHERE oim.meta_key = "_prdd_lite_date" AND oim.order_item_id = NEW.order_item_id;
  
  IF (@METAIDNEXT != '' AND @METAIDEND != '' AND @NEWDATE != '')
  THEN
    update wp_postmeta SET meta_value = DATE_FORMAT(DATE_ADD(STR_TO_DATE(@NEWDATE,'%Y-%m-%d'), INTERVAL 2 MONTH),'%Y-%m-%d %H:%i:%s') WHERE meta_id = @METAIDEND; 
    update wp_postmeta SET meta_value = DATE_FORMAT(STR_TO_DATE(@NEWDATE,'%Y-%m-%d'),'%Y-%m-%d %H:%i:%s') WHERE meta_id = @METAIDNEXT; 
  END IF;
END 

如果我使自己从PhpMyAdmin中插入,并且在Wordpress进行购买时被触发,则触发器可以很好地工作,因为当发生错误时,它会使我的查询崩溃。 但是我想我在触发器中执行选择时不知道是否有所有数据。因此,我不知道是否应将触发器放置在此表中。

0 个答案:

没有答案