Я работаю с множеством custom_fields в WordPress.
В настоящее время я работаю с WooCommerce, я точно не знаю, связан ли мой вопрос с WP или просто с Woo.
У меня есть одна настройка настраиваемого поля в качестве поля выбора. Я могу выбирать между несколькими предметами, такими как:
- новый
- в наличии
- распроданный
Когда я выбираю «sold_out» и сохраняю публикацию / продукт, я не только хочу сохранить это поле, но также хочу установить для «_stock_status» значение «outofstock».
Поле «_stock_status» является полем WooCommerce по умолчанию. Это также раскрывающийся список. Вы можете выбрать значения «на складе» или «на складе».
Дело в том, что я работаю с функцией сохранения WooCommerce, которая называется woocommerce_process_product_meta
.
Я думал, что могу просто запустить две update_post_meta
функции. Но это не работает.
Я попробовал следующее: для тестирования проверьте, не пусто ли мое настраиваемое поле. Если он НЕ пустой, обновите его выбранным значением, а также обновите "_stock_status".
$woocommerce_select = $_POST['_my_custom_field'];
if( !empty( $woocommerce_select ) ) {
update_post_meta( $post_id, '_my_custom_field', esc_attr( $woocommerce_select ) );
update_post_meta( $post_id, '_stock_status', 'outofstock' );
}
С помощью этой функции я могу сохранить _my_custom_field, но _stock_status не изменится.
Я также пробовал варианты этой и других функций if. Но похоже, что я просто не могу обновить это поле таким образом.
$woocommerce_select = $_POST['_my_custom_field'];
if( $woocommerce_select == 'sold_out' ) {
update_post_meta( $post_id, '_my_custom_field', esc_attr( $woocommerce_select ) );
update_post_meta( $post_id, '_stock_status', 'outofstock' );
} else {
update_post_meta( $post_id, '_my_custom_field', esc_attr( $woocommerce_select ) );
}
Не знаю, что я здесь делаю не так, может быть, кто-нибудь укажет мне на это.
Спасибо, Мо
Обновление: добавлена функция / крючок:
function woo_add_custom_general_fields_save( $post_id ){
$woocommerce_select = $_POST['_my_custom_field'];
if( !empty( $woocommerce_select ) ) {
update_post_meta( $post_id, '_my_custom_field', esc_attr( $woocommerce_select ) );
update_post_meta( $post_id, '_stock_status', 'outofstock' );
}
}
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save', 999 );
Я также пробовал с более низким приоритетом или без него.
Вот как я создаю настраиваемое поле:
function woo_add_custom_general_fields() {
global $woocommerce, $post; ?>
<div class="options_group">
<p class="form-field custom_stock">
<label for="custom_stock"><?php echo __( 'Custom Stock', 'aat-net-theme' ); ?></label>
<span class="wrap">
<?php $custom_stock = get_post_meta( $post->ID, '_my_custom_field', true ); ?>
<select id="custom_stock" name="_my_custom_field">
<option value="" <?php selected( $custom_stock, '' ); ?>> - Select Stock - </option>
<option value="new" <?php selected( $custom_stock, 'new' ); ?>>New</option>
<option value="in_stock" <?php selected( $custom_stock, 'in_stock' ); ?>>In Stock</option>
<option value="on_request" <?php selected( $custom_stock, 'on_request' ); ?>>On Request</option>
<option value="in_transit" <?php selected( $custom_stock, 'in_transit' ); ?>>In Transit</option>
<option value="not_available" <?php selected( $custom_stock, 'not_available' ); ?>>Not Available</option>
</select>
</span>
<span class="description"><?php _e( 'Select the custom stock-status here.', 'aat-net-theme' ); ?></span>
</p>
<?php }
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );