Ниже представлен пользовательский продукт 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:
Теперь, используя 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 здесь
Этот код проверен и работает …