Частота подписок и изменение цены в подписках Woocommerce

Может быть, я упустил это, но сколько бы я ни искал, я не мог найти, какой action перехватывать, когда подписка меняет цену или частоту в подписках Woocommerce.

документация говорит, что для поддержки изменений цен в вашем платежном шлюзе вы должны перечислить subscription_amount_changes, но нигде не говорится, какая функция будет вызвана, когда сумма действительно изменится ..

Также в Ссылка на действие Мне не удалось найти хук действия, который вызывается при изменении количества или частоты подписки. Если у кого-то есть подсказка, какой хук использовать или как реализовать эту особенность, скажите, пожалуйста.


редактировать

Хорошо, спасибо за комментарии и ответ @Reigel, поэтому, если я правильно понимаю, изменение подписки в меню администратора (к которому я действительно обращаюсь), должно обрабатываться save_post действие. Не могли бы вы привести небольшой пример, как подключить это действие и проверить, является ли это подпиской, и получить $order_id (Я думаю, это так же, как post_id?) использовать в управлении подпиской звонки?

Большое спасибо уже!

2

Решение

Я постараюсь объяснить 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 так как это больше подходит для проверки поддержки. Потому что уже выбран шлюз.

1

Другие решения

Это следует считать дополнением к ответу @Reigel. Если вы проголосуете за это, тоже проголосуйте за его ответ.

Вот пример подключения pre_post_update действие. Это происходит немного раньше, чем save_post действие. Оба действия запускаются в wp_insert_post() функция в 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 или пользовательский код плагина.
  • В живом коде я бы рекомендовал чистить любой $_POST данные перед его использованием. Я не беспокоился здесь.
2

По вопросам рекламы [email protected]