моккочиночиномокко
Новичок
Всем привет, на сайте Wordpress c Woocommerce добавил код в файл functions.php,
по задумке:
Этот код должен добавить новые поля в админке, в каждой карточке товара, при заполнении показывать их на сайте в соответствующей карточке, а если поле не заполнено, то и показывать не надо.
Что получилось в итоге:
Поля есть, заполняются и отражаются как надо, но если поле очистить, то при сохранении он подставляет обратно все что было вписано.
Вот код:
add_action( 'woocommerce_product_options_general_product_data', 'art_woo_add_custom_fields' );
function art_woo_add_custom_fields() {
global $product, $post;
echo '<div class="options_group">';
// текстовое поле
woocommerce_wp_text_input( array(
'id' => '_text_field',
'label' => __( 'Текстовое поле', 'woocommerce' ),
'placeholder' => 'Текстовое поле',
'desc_tip' => 'true',
'description' => __( 'Введите здесь значение поля', 'woocommerce' ),
) );
// Тектовая область
woocommerce_wp_textarea_input( array(
'id' => '_textarea', // Идентификатор поля
'label' => 'Область текста', // Заголовок поля
'placeholder' => 'Ввод текста', // Надпись внутри поля
'class' => 'textarea-field', // Произвольный класс поля
'style' => 'width: 70%; background:red', // Произвольные стили для поля
'wrapper_class' => 'wrap-textarea', // Класс обертки поля
'desc_tip' => 'true', // Включение подсказки
'description' => 'Здесь можно что-нибудть вводить',// Описение поля
'name' => 'textarea-field', // Имя поля
) );
echo '</div>';
}
/****/
add_action( 'woocommerce_process_product_meta', 'art_woo_custom_fields_save', 10 );
function art_woo_custom_fields_save( $post_id ) {
// Сохранение текстового поля
$woocommerce_text_field = $_POST['_text_field'];
if ( $woocommerce_text_field ) {
update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) );
}
// Сохранение области тектса
$woocommerce_textarea = $_POST['textarea-field'];
if ( ! empty( $woocommerce_textarea ) ) {
update_post_meta( $post_id, '_textarea', esc_html( $woocommerce_textarea ) );
// Сохранение произвольного поля по выбору товаров с поиском
if ( isset( $_POST['product_field_type'] ) && !empty($_POST['product_field_type'] ) ) {
// Проверяем данные, если они существуют и не пустые, то записываем данные в поле
update_post_meta( $post_id, '_product_field_type_ids', array_map( 'absint', (array) $_POST['product_field_type'] ));
} else {
// Иначе удаляем созданное поле из бд
delete_post_meta( $post_id, '_product_field_type_ids');
}
}
/****/
add_action( 'woocommerce_single_product_summary', 'art_get_text_field_before_show_atts_on_product_page', 40 );
function art_get_text_field_before_show_atts_on_product_page() {
global $post, $product;
$text_field = get_post_meta( $post->ID, '_text_field', true );
$textarea_field = get_post_meta( $post->ID, '_textarea', true );
if ( $text_field ) {
?>
<div class="text-field">
<strong>Поле1: </strong>
<?php echo $text_field; ?>
</div>
<?php }
if ( $textarea_field ) { ?>
<div class="textarea-field">
<strong>Область: </strong>
<?php echo $textarea_field; ?>
</div>
<?php
}
}
по задумке:
Этот код должен добавить новые поля в админке, в каждой карточке товара, при заполнении показывать их на сайте в соответствующей карточке, а если поле не заполнено, то и показывать не надо.
Что получилось в итоге:
Поля есть, заполняются и отражаются как надо, но если поле очистить, то при сохранении он подставляет обратно все что было вписано.
Вот код:
add_action( 'woocommerce_product_options_general_product_data', 'art_woo_add_custom_fields' );
function art_woo_add_custom_fields() {
global $product, $post;
echo '<div class="options_group">';
// текстовое поле
woocommerce_wp_text_input( array(
'id' => '_text_field',
'label' => __( 'Текстовое поле', 'woocommerce' ),
'placeholder' => 'Текстовое поле',
'desc_tip' => 'true',
'description' => __( 'Введите здесь значение поля', 'woocommerce' ),
) );
// Тектовая область
woocommerce_wp_textarea_input( array(
'id' => '_textarea', // Идентификатор поля
'label' => 'Область текста', // Заголовок поля
'placeholder' => 'Ввод текста', // Надпись внутри поля
'class' => 'textarea-field', // Произвольный класс поля
'style' => 'width: 70%; background:red', // Произвольные стили для поля
'wrapper_class' => 'wrap-textarea', // Класс обертки поля
'desc_tip' => 'true', // Включение подсказки
'description' => 'Здесь можно что-нибудть вводить',// Описение поля
'name' => 'textarea-field', // Имя поля
) );
echo '</div>';
}
/****/
add_action( 'woocommerce_process_product_meta', 'art_woo_custom_fields_save', 10 );
function art_woo_custom_fields_save( $post_id ) {
// Сохранение текстового поля
$woocommerce_text_field = $_POST['_text_field'];
if ( $woocommerce_text_field ) {
update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) );
}
// Сохранение области тектса
$woocommerce_textarea = $_POST['textarea-field'];
if ( ! empty( $woocommerce_textarea ) ) {
update_post_meta( $post_id, '_textarea', esc_html( $woocommerce_textarea ) );
// Сохранение произвольного поля по выбору товаров с поиском
if ( isset( $_POST['product_field_type'] ) && !empty($_POST['product_field_type'] ) ) {
// Проверяем данные, если они существуют и не пустые, то записываем данные в поле
update_post_meta( $post_id, '_product_field_type_ids', array_map( 'absint', (array) $_POST['product_field_type'] ));
} else {
// Иначе удаляем созданное поле из бд
delete_post_meta( $post_id, '_product_field_type_ids');
}
}
/****/
add_action( 'woocommerce_single_product_summary', 'art_get_text_field_before_show_atts_on_product_page', 40 );
function art_get_text_field_before_show_atts_on_product_page() {
global $post, $product;
$text_field = get_post_meta( $post->ID, '_text_field', true );
$textarea_field = get_post_meta( $post->ID, '_textarea', true );
if ( $text_field ) {
?>
<div class="text-field">
<strong>Поле1: </strong>
<?php echo $text_field; ?>
</div>
<?php }
if ( $textarea_field ) { ?>
<div class="textarea-field">
<strong>Область: </strong>
<?php echo $textarea_field; ?>
</div>
<?php
}
}