У меня проблема с функцией update_post_meta. У меня есть отправленное пользователем значение, которое я передаю через $_POST, а затем сохраняю в публикацию мета.
Все работает нормально, но когда значение равно «0», метаданные сообщения не обновляются.
Это мой код:
// Add custom checkout field: woocommerce_review_order_before_submit
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field_ritiro_sede' );
function my_custom_checkout_field_ritiro_sede() {
echo '<div class = "cw_custom_class"><h3>'.__('Ritiro presso sede CER S.r.l.  ').'</h3>';
echo '<div id = "my_custom_checkout_field">';
woocommerce_form_field( 'ritiro_sede', array(
'type' => 'checkbox',
'class' => array('input-checkbox'),
'label' => __('SI'),
), WC()->checkout->get_value( 'ritiro_sede' ) );
echo '</div>';
}
// Save the custom checkout field in the order meta, when checkbox has been checked
add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta_ritiro_sede', 10, 1 );
function custom_checkout_field_update_order_meta_ritiro_sede( $order_id ) {
if ( ! empty( $_POST['ritiro_sede'] ) )
update_post_meta( $order_id, 'ritiro_sede', $_POST['ritiro_sede'] );
if ( isset( $_POST['ritiro_sede'] ) )
update_post_meta( $order_id, 'ritiro_sede', $_POST['0'] );
}
Кто-нибудь знает, что может быть не так?
Начиная с WooCommerce 3, ниже приведен лучший способ сохранить значение пользовательского поля флажка оформления заказа в качестве метаданных заказа (включая случаи, когда флажок не установлен):
// Save the custom checkout checkbox field as the order meta
add_action( 'woocommerce_checkout_create_order', 'custom_checkout_field_update_order_meta', 10, 2 );
function custom_checkout_field_update_order_meta( $order, $data ) {
$value = isset($_POST['ritiro_sede']) ? '1' : '0'; // Set the correct values
$order->update_meta_data( 'ritiro_sede', $value );
}
Теперь, когда пользовательские метаданные используются методом WC_Checkout
get_value()
в вашей первой функции:
WC()->checkout->get_value( 'ritiro_sede' )
Поэтому, если вы хотите, чтобы отправленное значение отображалось на странице оформления заказа для следующей покупки, вам нужно будет сохранить это настраиваемое поле оформления заказа также как метаданные пользователя, используя вместо этого следующее:
// Save the custom checkout checkbox field as the order meta and user meta
add_action( 'woocommerce_checkout_create_order', 'custom_checkout_field_update_order_meta', 10, 2 );
function custom_checkout_field_update_order_meta( $order, $data ) {
$value = isset($_POST['ritiro_sede']) ? '1' : '0'; // Set the correct values
// Save as custom order meta data
$order->update_meta_data( 'ritiro_sede', $value );
// Save as custom user meta data
if ( get_current_user_id() > 0 ) {
update_user_meta( get_current_user_id(), 'ritiro_sede', $value );
}
}
Код находится в файле functions.php активной дочерней темы (или активной темы). Проверено и работает.
Некоторые заметки о вашем коде. Отсутствует закрывающий div. Так что замените
echo '</div>';
наecho '</div></div>';