Woocommerce订阅中的订阅频率和价格变化挂钩

时间:2016-01-21 14:15:00

标签: php wordpress woocommerce payment-gateway subscriptions

也许我忽略了它,但是在我搜索的时候,当订阅改变Woocommerce订阅中的价格或频率时,我找不到哪个action挂钩。

documentation表示要支持付款网关中的价格变化,您必须列出subscription_amount_changes,但无论何时它都说明当金额实际发生变化时将调用哪个函数。

同样在Action reference中,我无法找到在订阅金额或频率发生变化时调用的动作挂钩。如果有人知道要使用哪种钩子或如何实现这一特定功能,请告诉我。

修改

好的感谢@Reigel的评论和回答,所以如果我理解正确管理菜单中的订阅更改(我确实参考),则必须由save_post操作处理。你能提供一个小例子如何挂钩这个动作并检查它是否是一个订阅并获得$order_id(我想这与post_id相同?)在订阅管理调用中使用?< / p>

非常感谢你!

2 个答案:

答案 0 :(得分:2)

这应该被认为是@Reigel答案的补充。如果你赞成这一点,那么也要提出他的答案。

以下是挂钩pre_post_update操作的示例。它发生在save_post动作之前一点。这两项操作均在wp_insert_post()的{​​{1}}函数中触发。

post.php
  • 在逻辑中,我们检查使用function post_save_subscription_check( $post_ID, $data ) { if( $data['post_type'] == 'product' ) { if (!empty($_POST['_subscription_price']) && get_post_meta($post_ID, '_subscription_price', true) != $_POST['_subscription_price']) { /* do stuff here */ } if (!empty($_POST['_subscription_period']) && get_post_meta($post_ID, '_subscription_period', true) != $_POST['_subscription_period']) { /* do stuff here */ } } } add_action('pre_post_update', 'post_save_subscription_check', 10, 2 ); 得到的旧值和新值,保存在get_post_meta()变量中并进行比较。
  • 此代码仅在帖子更新时执行,而不是针对新帖子执行
  • 代码放在主题$_POST或自定义插件代码中。
  • 在实时代码中,我建议您在使用之前清除所有functions.php数据。我没有在这里烦恼。

答案 1 :(得分:1)

我将尝试解释supports

subscription_amount_changes只是一种支持,不会发射任何东西。您可以将它用于条件语句,例如:

if ( !$chosen_gateway->supports( 'subscription_amount_changes' )) { 
     echo 'Please be considerate and do not change the price for the chosen gateway does not support it.';
}

现在,其他插件可以检查所选网关是否支持subscription_amount_changes并执行相应的操作。

  

动作挂钩,在订阅金额或频率时调用   变化

订阅只是一种产品类型。这意味着这只是一个post_type产品的帖子。数量和频率只是后元。所有这些都是在save_post行动中处理的。 add_action( 'save_post', __CLASS__ . '::save_subscription_meta', 11 );。这是post_type=product。您还需要检查save_post上的post_type=shop_order,因为它更适合检查支持。因为已经选择了一个网关。