Я вставил следующий код в functions.php, так что WooCommerce показывает только способы оплаты в зависимости от способов доставки:
function payment_gateways_based_on_chosen_shipping_method( $gateways ) {
// Get chosen shipping methods
$chosen_shipping_methods = (array) WC()->session->get( 'chosen_shipping_methods' );
if ( in_array( 'flat_rate:2', $chosen_shipping_methods ) )
{
unset( $gateways['cheque'] );
}
elseif ( in_array( 'flat_rate:3', $chosen_shipping_methods ) )
{
unset( $gateways['cheque'] );
}
elseif ( in_array( 'flat_rate:5', $chosen_shipping_methods ) )
{
unset( $gateways['cheque'] );
}
elseif ( in_array( 'flat_rate:12', $chosen_shipping_methods ) )
{
unset( $gateways['cod'] );
unset( $gateways['cheque'] );
}
return $gateways;
}
Это работает хорошо, но если я изменяю статус заказа для нескольких заказов, я получаюошибка:
Uncaught Error: Call to a member function get() on null in /home/wp/disk/wordpress/wp-content/themes/flatsome-child/functions.php:313
Stack trace:
#0 /home/wp/disk/wordpress/wp-includes/class-wp-hook.php(286): payment_gateways_based_on_chosen_shipping_method(Array)
#1 /home/wp/disk/wordpress/wp-includes/plugin.php(208): WP_Hook->apply_filters(Array, Array)
#2 /home/wp/disk/wordpress/wp-content/plugins/woocommerce/includes/class-wc-payment-gateways.php(160): apply_filters('woocommerce_ava...', Array)
#3 /home/wp/disk/wordpress/wp-content/plugins/woocommerce-germanized/includes/wc-gzd-order-functions.php(22): WC_Payment_Gateways->get_available_payment_gateways()
#4 /home/wp/disk/wordpress/wp-includes/class-wp-hook.php(288): wc_gzd_cart_forwarding_fee_notice_filter(Array, Object(WC_Order))
#5 /home/wp/disk/wordpress/wp-includes/plugin.php(208): WP_Hook->apply_filters(Array, Array)
#6 /home/wp/disk/wordpress/wp-content/plugins/woocommerce/includes/class-wc-order.php(2018): apply_filters('woocommerce_
строка 313 - это "$ selected_shipping_methods = (массив) WC () -> сессия-> get ('selected_shipping_methods');"
Есть кто-нибудь подсказка (илирешение) чтобы решить эту проблему? Потому что требуется много времени, чтобы изменить статус заказа для каждого заказа индивидуально.
Большое спасибо!
Хольгер