sanitize_text_field( $_POST["table_{$table_num}_name"] ), 'rows' => [] ]; // Получаем строки таблицы if ( isset( $_POST["table_{$table_num}_rows"] ) && is_array( $_POST["table_{$table_num}_rows"] ) ) { foreach ( $_POST["table_{$table_num}_rows"] as $row ) { $table_data['rows'][] = [ 'thickness' => floatval( $row['thickness'] ?? 0 ), 'width' => floatval( $row['width'] ?? 0 ), 'length' => floatval( $row['length'] ?? 0 ), 'k1' => floatval( $row['k1'] ?? 1 ), 'k2' => floatval( $row['k2'] ?? 1 ), 'k3' => floatval( $row['k3'] ?? 1 ), 'k4' => floatval( $row['k4'] ?? 1 ), 'k5' => floatval( $row['k5'] ?? 1 ), 'n' => floatval( $row['n'] ?? 0 ), ]; } } $tables[ $table_num ] = $table_data; } update_option( 'orgsteklo_price_tables', $tables ); update_option( 'orgsteklo_price_tables_count', $table_count ); // Редирект с сообщением об успехе wp_redirect( add_query_arg( 'settings-updated', 'true', wp_get_referer() ) ); exit; } // Страница админки function orgsteklo_price_calculator_page() { // Получаем сохраненные данные $base_price = get_option( 'orgsteklo_base_price_per_kg', 300 ); $tables = get_option( 'orgsteklo_price_tables', [] ); $table_count = get_option( 'orgsteklo_price_tables_count', 5 ); // Названия таблиц по умолчанию $default_table_names = [ 1 => 'Оргстекло прозрачное, бесцветное', 2 => 'Оргстекло прозрачное, цветное', 3 => 'Оргстекло глухое, сатинированное', 4 => 'Оргстекло флуоресцентное, день/ночь, зеркальное', 5 => 'Оргстекло с особыми свойствами', ]; // Генерируем названия для дополнительных таблиц for ( $i = 6; $i <= $table_count; $i++ ) { $default_table_names[$i] = "Таблица {$i}"; } ?>

Калькулятор цен на оргстекло

Настройки сохранены!

Основные параметры

При изменении этого значения пересчитываются все цены

По умолчанию: 1.19 г/см³

Множитель для нестандартных размеров. По умолчанию: 1.2


Таблицы стандартных размеров, коэффициентов и надбавок

Таблица

Строки данных

$row ) : ?>
Толщина (мм) Ширина (мм) Длина (мм) K1 K2 K3 K4 K5 N (надбавка, руб) Действия

По умолчанию: 5 таблиц. Нажмите кнопку для добавления новой таблицы.

'-- Не выбрано --' ]; $default_names = [ 1 => 'Оргстекло прозрачное, бесцветное', 2 => 'Оргстекло прозрачное, цветное', 3 => 'Оргстекло глухое, сатинированное', 4 => 'Оргстекло флуоресцентное, день/ночь, зеркальное', 5 => 'Оргстекло с особыми свойствами', ]; for ( $i = 1; $i <= $table_count; $i++ ) { $name = $tables[ $i ]['name'] ?? ( $default_names[$i] ?? "Таблица {$i}" ); $options[ $i ] = "Таблица {$i}: {$name}"; } echo '
'; woocommerce_wp_select( [ 'id' => '_orgsteklo_price_table', 'label' => 'Таблица расчета цен', 'description' => 'Выберите таблицу для расчета цен на оргстекло. Данные берутся из "Калькулятор цен" в меню.', 'desc_tip' => true, 'options' => $options, ] ); woocommerce_wp_textarea_input( [ 'id' => '_orgsteklo_important_text', 'label' => 'Текст "Важно"', 'description' => 'Информационный текст под калькулятором. Оставьте пустым для стандартного текста.', 'desc_tip' => true, 'placeholder' => 'Важно: оргстекло толщиной более 6 мм...', ] ); echo '
'; } // Сохранение поля add_action( 'woocommerce_process_product_meta', 'orgsteklo_save_price_table_field' ); function orgsteklo_save_price_table_field( $post_id ) { $table_number = isset( $_POST['_orgsteklo_price_table'] ) ? sanitize_text_field( $_POST['_orgsteklo_price_table'] ) : ''; update_post_meta( $post_id, '_orgsteklo_price_table', $table_number ); $important_text = isset( $_POST['_orgsteklo_important_text'] ) ? wp_kses_post( $_POST['_orgsteklo_important_text'] ) : ''; update_post_meta( $post_id, '_orgsteklo_important_text', $important_text ); // Автоматически создаем вариации из таблицы калькулятора if ( ! empty( $table_number ) && function_exists( 'orgsteklo_create_variations_from_table' ) ) { $result = orgsteklo_create_variations_from_table( $post_id ); // Выводим alert с результатом add_action( 'admin_notices', function() use ( $result ) { $class = $result['success'] ? 'notice-success' : 'notice-error'; $message = $result['message']; echo "

Вариации калькулятора: $message

"; // Дополнительно выводим JS alert для гарантии echo ""; } ); } } // Отображение поля в вариациях (если нужно для вариативных товаров) add_action( 'woocommerce_product_after_variable_attributes', 'orgsteklo_add_variation_price_table_field', 10, 3 ); function orgsteklo_add_variation_price_table_field( $loop, $variation_data, $variation ) { // Получаем значение для родительского товара (вариации наследуют таблицу от родителя) $parent_id = wp_get_post_parent_id( $variation->ID ); $parent_table = get_post_meta( $parent_id, '_orgsteklo_price_table', true ); if ( $parent_table ) { echo '
'; echo 'Таблица расчета цен: Таблица ' . esc_html( $parent_table ) . ' (наследуется от родительского товара)'; echo '
'; } }