Получение имени метки для пользовательских полей в закладках продукта бэкэнда

Ниже представлен пользовательский продукт WooCommerce с настраиваемым полем, пользовательской вкладкой и содержимым:

Я беру выборку первого текстового поля на этой вкладке. Цель состоит в том, чтобы получить свойство «label» этих полей.

function launch_product_tab_content() { global $post; ?><div id='launch_contents' class='panel woocommerce_options_panel'><?php ?><div class='options_group'><?php woocommerce_wp_text_input( array( 'id' => '_text_announced', 'label' => __( 'Announced(Global)', 'woocommerce' ), 'desc_tip' => 'true', 'description' => __( 'Year and Month it was announced global', 'woocommerce' ), 'type' => 'text', ) ); woocommerce_wp_text_input( array( 'id' => '_text_announced_ph', 'label' => __( 'Announced(Philippines)', 'woocommerce' ), 'desc_tip' => 'true', 'description' => __( 'Year and Month it was announced global', 'woocommerce' ), 'type' => 'text', ) ); woocommerce_wp_text_input( array( 'id' => '_text_availability_ph', 'label' => __( 'Availability(Philippines)', 'woocommerce'), 'desc_tip' => 'true', 'description' => __( 'Schedule date of availability in the Philippines', 'woocommerce' ), 'type' => 'text', ) ); ?></div> </div><?php } add_action( 'woocommerce_product_data_panels', 'launch_product_tab_content' ); 

Вот как это выглядит на странице редактора продукта, Пользовательский продукт в WordPress:

Пользовательская вкладка WooCommerce с настраиваемым текстовым полем

Теперь, используя ACF, я использовал этот код:

 <?php $field_key = "_text_announced"; $post_id = $post->ID; $field = get_field_object($field_key, $post_id); echo $field['label'] . ': ' . $field['value']; ?> 

попробовал также echo var_dump($field);

введите описание изображения здесь

Кто-то сказал, что проект WooCommerce не привязан к объекту ACF? Вот почему я не могу получить доступ к объекту WooCommerce через ACF? Твои мысли.

Благодаря!

ОБНОВЛЕНИЕ (РЕШЕНИЕ WORKIG ДЛЯ СОХРАНЕНИЯ И ВОСПРОИЗВЕДЕНИЯ ИМЕНЕМ ВАШИХ МАРШРУТОВ)

Я внес некоторые изменения. В вашем коде добавляются скрытые поля imput с вашими именами ярлыков. При сохранении / отправке данных автоматически сохраняются имена ярлыков.

Вот полный код:

 // ADDING A TAB TO WOOCOMMERCE PRODUCT DATA METABOX add_filter( 'woocommerce_product_data_tabs', 'launch_product_tab_content_tab' , 99 , 1 ); function launch_product_tab_content_tab( $product_data_tabs ) { $product_data_tabs['launch'] = array( 'label' => __( 'Launch', 'my_text_domain' ), 'target' => 'launch_contents', ); return $product_data_tabs; } // ADDING A FIELDS INSIDE THE TAB IN WOOCOMMERCE PRODUCT DATA METABOX add_action( 'woocommerce_product_data_panels', 'launch_product_tab_content' ); function launch_product_tab_content() { global $woocommerce, $post; // Setting here your labels $label_text_announced = __( 'Announced(Global)', 'woocommerce' ); $label_text_announced_ph = __( 'Announced(Philippines)', 'woocommerce' ); $label_text_availability_ph = __( 'Availability(Philippines)', 'woocommerce' ); ?> <div id='launch_contents' class='panel woocommerce_options_panel'> <div class='options_group'> <?php woocommerce_wp_text_input( array( 'id' => '_text_announced', 'label' => $label_text_announced, 'desc_tip' => 'true', 'description' => __( 'Year and Month it was announced global', 'woocommerce' ), 'type' => 'text', ) ); woocommerce_wp_text_input( array( 'id' => '_text_announced_ph', 'label' => $label_text_announced_ph, 'desc_tip' => 'true', 'description' => __( 'Year and Month it was announced global', 'woocommerce' ), 'type' => 'text', ) ); woocommerce_wp_text_input( array( 'id' => '_text_availability_ph', 'label' => $label_text_availability_ph, 'desc_tip' => 'true', 'description' => __( 'Schedule date of availability in the Philippines', 'woocommerce' ), 'type' => 'text', ) ); // Addind hidden imputs fields for your labels echo '<input type="hidden" id="text_announced_label" name="text_announced_label" value="'.$label_text_announced.'" /> <input type="hidden" id="text_announced_ph_label" name="text_announced_ph_label" value="'.$label_text_announced_ph.'" /> <input type="hidden" id="text_availability_ph_label" name="text_availability_ph_label" value="'.$label_text_availability_ph.'" />'; ?> </div> </div> <?php } // SAVING THE FIELDS DATA from THE TAB IN WOOCOMMERCE PRODUCT DATA METABOX add_action( 'woocommerce_process_product_meta', 'save_launch_product_tab_content' ); function save_launch_product_tab_content( $post_id ){ // Saving the data with the hidden data labels names if(isset($_POST['_text_announced'])){ update_post_meta( $post_id, '_text_announced', $_POST['_text_announced'] ); update_post_meta( $post_id, '_text_announced_label', $_POST['text_announced_label'] ); } if(isset($_POST['_text_announced_ph'])){ update_post_meta( $post_id, '_text_announced_ph', $_POST['_text_announced_ph'] ); update_post_meta( $post_id, '_text_announced_ph_label', $_POST['text_announced_ph_label'] ); } if(isset($_POST['_text_availability_ph'])){ update_post_meta( $post_id, '_text_availability_ph', $_POST['_text_availability_ph'] ); update_post_meta( $post_id, '_text_availability_ph_label', $_POST['text_availability_ph_label'] ); } } 

Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

После wp_postmeta ) все данные устанавливаются в таблице wp_postmeta для текущего идентификатора продукта (даже названия ярлыков), см. Ниже то, что вы получаете в этой таблице базы данных (идентификатор продукта здесь 99) :

введите описание изображения здесь

Теперь вы можете получить название своей метки и соответствующее значение данных …

Здесь теперь функция, которая будет автоматизировать этот процесс и установить эти значения в массиве:

 function get_label_and_value($product_id, $meta_key){ // As the meta_key of the label have the same slug + '_label' we get it here $key_label = $meta_key . '_label'; // Getting the values $meta_value = get_post_meta($product_id, $meta_key, true); $label_name = get_post_meta($product_id, $key_label, true); // Setting this data in an array: $result = array('label' => $label_name, 'value' => $meta_value); // Returning the data array return $result; } 

Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Теперь мы можем использовать эту функцию в любом файле PHP:

 <?php // The product ID $product_id = $product_id; // The field key $field_key = "_text_announced"; // Using our function $field1 = get_label_and_value($product_id, $field_key); // Displaying the data (just as you expected to do) echo $field1['label'] . ': ' . $field1['value']; ?> 

И вы получите:

 Announced(Global): April 2016 

Поэтому нет необходимости в ACF здесь

Этот код проверен и работает …