У меня возникла проблема с добавлением нового поля в WooCommerce до краткого описания.
Я использовал скрипт в functions.php
и мое новое настраиваемое поле отображается правильно, но:
Как я могу отобразить это настраиваемое поле без удаления краткого описания продукта?
Как сбросить содержимое настраиваемого поля?
Вот мой код:
// Add a custom Field add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' ); function woo_add_custom_general_fields() { global $woocommerce, $post; woocommerce_wp_text_input( array( 'id' => '_text_field', 'label' => __( 'Termin dostawy', 'woocommerce' ), 'placeholder' => 'np: 7 dni', 'desc_tip' => 'true', 'description' => __( 'Wpisz przewidywany termin dostawy, np: 7 dni.', 'woocommerce' ) ) ); } // Save the custom field add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' ); function woo_add_custom_general_fields_save( $post_id ){ $woocommerce_text_field = $_POST['_text_field']; if( ! empty( $woocommerce_text_field ) ) update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) ); } // Display the custom field add_action('woocommerce_short_description', 'magik_custom_text', 10, 1); function magik_custom_text() { global $product; global $woocommerce, $post; echo "Termin dostawy: ".get_post_meta( $post->ID, '_text_field', true ); }
Функция, ответственная за отображение:
add_action('woocommerce_short_description', 'magik_custom_text', 10, 1); function magik_custom_text() {
Обновление 2:
1) Вы должны добавить его в короткое описание вместо того, чтобы его заменить …
Правильный способ заключается в том, чтобы перехватить вашу пользовательскую функцию в woocommerce_single_product_summary
cation hook до краткого описания (с использованием приоритета между 11 и 19):
add_action('woocommerce_single_product_summary', 'magik_custom_text', 18); function magik_custom_text() { global $post; $field_value = get_post_meta( $post->ID, '_text_field', true ); // Displaying the custom field only when is set with a value if( ! empty( $field_value ) ) echo '<p>' . __('Termin dostawy: ', 'woocommerce') . $field_value . '</p>'; }
Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.
Протестировано и работает. Итак, вы получите следующее:
2) Чтобы иметь возможность удалять содержимое настраиваемого поля вашего продукта, вам необходимо заменить:
if( ! empty( $woocommerce_text_field ) )
от:
if( isset( $woocommerce_text_field ) )
в этой подключенной функции:
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' ); function woo_add_custom_general_fields_save( $post_id ){ $woocommerce_text_field = $_POST['_text_field']; if( isset( $woocommerce_text_field ) ) update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) ); }