WooCommerce - Получение правильного значения данных для поля выбора после отправки
Я использую Woocommerce и создал поле выбора в панели администратора. Я заполняю информацию в поле выбора с помощью неструктурированного файла. Все работает нормально (почти).
Часть, на которой я застрял, заключается в том, что после выбора нужного "выбора" и сохранения я получаю массив $key
положение, а не фактическое $value
. Я близок к этому, но просто не могу понять, в чем дело.
Обновление: Вот мой полный код:
function woo_add_custom_admin_product_tab() {
?>
<li class="custom_tab"><a href="#custom_tab_data"><?php _e('Additional Information', 'woocommerce'); ?></a></li>
<?php
}
add_action( 'woocommerce_product_write_panel_tabs', 'woo_add_custom_admin_product_tab' );
function woo_add_custom_admin_fields() {
global $woocommerce, $post;
echo '<div id="custom_tab_data" class="panel woocommerce_options_panel">';
echo '<div class="options_group">';
// Select - Breed1
if (file_exists ( plugin_dir_path(__FILE__) .'breed.txt')) {
$breedData = file_get_contents ( plugin_dir_path(__FILE__) .'breed.txt');
$breedArray = explode ("\n", $breedData);
}
woocommerce_wp_select(array(
'id' => '_select_breed1',
'label' => __( 'Select Primary Breed', 'woocommerce' ),
'desc_tip' => 'true',
'description' => __( 'Select the primary breed of the pet.', 'woocommerce' ),
'options' => $breedArray
) );
echo '</div>';
echo '</div>';
}
add_action( 'woocommerce_product_write_panels', 'woo_add_custom_admin_fields' );
// Save Fields;
function woo_add_custom_general_fields_save( $post_id ){
// Text Field - Pet Name
$woocommerce_text_field = $_POST['_pet_name'];
if( !empty( $woocommerce_text_field ) )
update_post_meta( $post_id, '_pet_name', esc_attr( $woocommerce_text_field ) );
// Select Field - Breed
$woocommerce_select = $_POST['_select_breed1'];
if( !empty( $woocommerce_select ) )
update_post_meta( $post_id, '_select_breed1', esc_attr( $woocommerce_select ) );
}
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
Мой breed.txt файл содержит 3 строки (элементы):
Please Select a breed...
Abyssinian
Affenpinscher
И сгенерированный массив выглядит следующим образом:
Array (
[0] => Please Select a breed...
[1] => Abyssinian
[2] => Affenpinscher
)
Поэтому, когда я выбираю "Affenpinscher"
например, я получаю в качестве значения "2"
вместо того, чтобы "Affenpinscher"
.
Что я делаю не так? Как я могу решить эту проблему?
Спасибо
1 answers
-Обновлено - (протестировано и работает)
Это абсолютно нормальное поведение для выпадающего списка <select>
. Вам просто нужно добавить некоторые мелочи в свой код, чтобы заставить его работать по-другому.
Изменения заключаются в следующем:
- во-первых, когда массив значений из внешнего текстового файла доступен, я сохраняю его в настройках wordpress.
- Во-вторых, в последней функции сохранения я получаю сохраненный массив и с помощью выбранныйkey
что я получаю от$_POST['_select_breed_key1'];
, Я извлекаю соответствующее значение, которое сохраняю в новой записи (новая строка в таблице wp_postmeta.
//Create the fields
function woo_add_custom_admin_fields() {
global $woocommerce, $post;
echo '<div id="custom_tab_data" class="panel woocommerce_options_panel">';
echo '<div class="options_group">';
// Select - Breed1
if (file_exists ( plugin_dir_path(__FILE__) .'breed.txt')) {
$breedData = file_get_contents ( plugin_dir_path(__FILE__) .'breed.txt');
$breedArray = explode ("\n", $breedData);
//Storing the array in wp_options table
if( get_option( 'wc_product_add_info_tab' ) )
update_option( 'wc_product_add_info_tab', $breedArray );
else
add_option( 'wc_product_add_info_tab', $breedArray );
}
woocommerce_wp_select( array(
'id' => '_select_breed_key1',
'label' => __( 'Select Primary Breed', 'woocommerce' ),
'desc_tip' => 'true',
'description' => __( 'Select the primary breed of the pet.', 'woocommerce' ),
'options' => $breedArray
) );
echo '</div>';
echo '</div>';
}
add_action( 'woocommerce_product_write_panels', 'woo_add_custom_admin_fields' );
// Save Created Fields;
function woo_add_custom_general_fields_save( $post_id ){
// Select Field - Breed
$wc_select = $_POST['_select_breed_key1'];
if( !empty( $wc_select ) )
update_post_meta( $post_id, '_select_breed_key1', esc_attr( $wc_select ) );
// Saving the corresponding value (from "$wc_select" selected key) to database
if(get_option('wc_product_add_info_tab')) {
// Getting the array
$breed_arr = get_option('wc_product_add_info_tab');
// Saving the corresponding value
update_post_meta( $post_id, '_select_breed_value1', $breed_arr[$wc_select] );
}
}
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
Теперь у вас есть в
wp_postmeta
таблица для идентификатора продукта (post_id), 2 метаключей:
-'_select_breed_key1'
в котором хранится выбранный ключ
-'_select_breed_value1'
в котором хранится соответствующее значение
Использование, например (для получения этого значения):
<?php
// Third parameter is set to "true" as it is a string (Not an array)
$breed_value1 = get_post_meta( $post_id, '_select_breed_value1', true );
echo $breed_value1;
?>