Woocommerce 订阅中的订阅频率和价格变化挂钩
Subscription Frequency and Price Change hook in Woocommerce Subscriptions
也许我忽略了它,但就我的搜索而言,我无法找到当订阅在 Woocommerce 订阅中更改价格或频率时挂钩的 action
。
documentation 说要支持支付网关中的价格变化,您必须列出 subscription_amount_changes
,但没有任何地方说当金额实际变化时将调用哪个函数..
同样在 Action reference 中,我找不到在订阅量或频率发生变化时调用的操作挂钩。如果有人知道使用哪个挂钩或如何实现此特定功能,请告诉我。
编辑
好的,感谢@Reigel 的评论和回答,所以如果我正确理解管理菜单中订阅的更改(我确实提到了),则必须由 save_post
操作处理.您能否提供一个小示例,如何挂钩此操作并检查它是否是订阅并获取 $order_id
(我猜这与 post_id
相同?)以在订阅管理调用中使用?
非常感谢!
我会尽量解释一下 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
并执行适当的操作。
action hook which is called when the subscription amount or frequency
changes
订阅只是一种产品类型。这意味着这只是 post 和 post_type
的产品。数量和频率只是 post 元。所有都在 save_post
操作上处理。 add_action( 'save_post', __CLASS__ . '::save_subscription_meta', 11 );
。这是在 post_type=product
上。您还必须在 post_type=shop_order
上检查 save_post
,因为它更适合检查支持。因为已经选择了网关。
这应该被视为@Reigel 的答案的补充。如果您赞成这个,请也赞成他的回答。
下面是挂钩 pre_post_update
操作的示例。它发生在 save_post
动作之前一点。这两个动作都是在 post.php
中的 wp_insert_post()
函数中触发的。
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
变量中的新值并比较它们。
- 此代码仅在 post 更新时执行,而不是针对新的 post
- 代码被放置在您的主题
functions.php
或自定义插件代码中。
- 在实时代码中,我建议在使用前清理任何
$_POST
数据。我没有打扰这里。
也许我忽略了它,但就我的搜索而言,我无法找到当订阅在 Woocommerce 订阅中更改价格或频率时挂钩的 action
。
documentation 说要支持支付网关中的价格变化,您必须列出 subscription_amount_changes
,但没有任何地方说当金额实际变化时将调用哪个函数..
同样在 Action reference 中,我找不到在订阅量或频率发生变化时调用的操作挂钩。如果有人知道使用哪个挂钩或如何实现此特定功能,请告诉我。
编辑
好的,感谢@Reigel 的评论和回答,所以如果我正确理解管理菜单中订阅的更改(我确实提到了),则必须由 save_post
操作处理.您能否提供一个小示例,如何挂钩此操作并检查它是否是订阅并获取 $order_id
(我猜这与 post_id
相同?)以在订阅管理调用中使用?
非常感谢!
我会尽量解释一下 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
并执行适当的操作。
action hook which is called when the subscription amount or frequency changes
订阅只是一种产品类型。这意味着这只是 post 和 post_type
的产品。数量和频率只是 post 元。所有都在 save_post
操作上处理。 add_action( 'save_post', __CLASS__ . '::save_subscription_meta', 11 );
。这是在 post_type=product
上。您还必须在 post_type=shop_order
上检查 save_post
,因为它更适合检查支持。因为已经选择了网关。
这应该被视为@Reigel 的答案的补充。如果您赞成这个,请也赞成他的回答。
下面是挂钩 pre_post_update
操作的示例。它发生在 save_post
动作之前一点。这两个动作都是在 post.php
中的 wp_insert_post()
函数中触发的。
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
变量中的新值并比较它们。 - 此代码仅在 post 更新时执行,而不是针对新的 post
- 代码被放置在您的主题
functions.php
或自定义插件代码中。 - 在实时代码中,我建议在使用前清理任何
$_POST
数据。我没有打扰这里。