Почему не работает выборка в форму wordpress?

Собственно надо было реализовать функцию подарков в интернет-магазине. Идея таковая, что бы для каждого товары выбирать один из товаров в подарок и выводить его в карточке товара, ну и т.д.

Но возникла проблема, товар выбирается, в БД сохраняется, но почему то при обновлении карточки товара не подгружается.

Вот смотрите, выбираем товар, поиск работает, выбор осуществляется.
5f85a38bcbaad637926260.png

5f85a396a7e23547255052.png

Но после сохранения, или последующего открытия товара не отображется какие подарки выбраны.
5f85a3bd3c340940985132.png

<?php
/*
 * Plugin Name: Gift for Products
 * Plugin URI: https://triniti.biz.ua
 * Description: Подарки для товаров 
 * Version: 0.1
 * Author: Andrey
 * Author URI: https://triniti.biz.ua
 * License: GPLv2 or later
 */
add_action( 'woocommerce_product_options_general_product_data', 'woo_marketing_fields' );
function woo_marketing_fields() {
	global $product, $post;
	echo '<div class="options_group">';
	
woocommerce_wp_select( array(
   'id'      => '_select_bonus',
   'label'   => 'Параметри промо-акції',
   'options' => array(
      'active'   => __( 'Акція не проводиться', 'woocommerce' ),
      '100uah'   => __( 'Бонус 100 грн', 'woocommerce' ),
      '200uah' => __( 'Бонус 200 грн', 'woocommerce' ),
   ),
) );
?>
<p class="form-field gift_product_type">
   <label for="gift_product_type">Вибір подарунка</label> <select id="gift_product_type"
      name="gift_product_type[]" class="wc-product-search" multiple="multiple" style="width: 50%;" data-placeholder="<?php esc_attr_e( 'Пошук подарункових товарів…', 'woocommerce' ); ?>" data-action="woocommerce_json_search_products_and_variations" data-exclude="<?php echo intval( $post->ID ); ?>">
      <?php
      $gift_product_ids = get_post_meta( $post->ID, '_gift_product_ids', true );
      $product_ids = ! empty( $gift_product_ids ) && isset($gift_product_ids) ? array_map( 'absint',  $gift_product_ids ) : array();
      if ( $product_ids ) {
         foreach ( $product_ids as $product_id ) {
            $product      = wc_get_product( $product_id );
            $product_name = $product->get_formatted_name();
            echo '<option value="' . esc_attr( $product_id ) . '" ' . selected(true, true, false )  . '>' .
                 esc_html( $product->get_formatted_name() ) . '</option>';
         }
      }
      ?>
      </select><span class="woocommerce-help-tip" data-tip="Обраний подурунок буде відображатись в карточці товару"></span>
   </p>
   <?php
	echo '</div>';}

   add_action( 'woocommerce_process_product_meta', 'woo_marketing_fields_save', 10 );
function woo_marketing_fields_save( $post_id ) {
   // Cохраняем выбраный бонус
   $woocommerce_select = $_POST['_select_bonus'];
   if ( ! empty($woocommerce_select )) {
      update_post_meta( $post_id, '_select_bonus', esc_attr( $woocommerce_select ) );
   }
// Сохранение произвольного поля по выбору товаров с поиском
    if (  isset( $_POST['gift_product_type'] ) && !empty($_POST['gift_product_type'] ) ) {
      // Проверяем данные, если они существуют и не пустые, то записываем данные в поле
      update_post_meta( $post_id, '_gift_product_id',  array_map( 'absint', (array) $_POST['gift_product_type'] ));
   } else {
      // Иначе удаляем созданное поле из бд
      delete_post_meta( $post_id, '_gift_product_id');
   }
}
   
function product_bonus_button() {
	global $post, $product;
	$bonus_select = get_post_meta( $post->ID, '_select_bonus', true );
	if ( $bonus_select == "200uah") {
			echo do_shortcode('[html_block id="17170"]'); }
	elseif ( $bonus_select == "100uah") {
			echo do_shortcode('[html_block id="17174"]'); }
	else ;
		}


Просьба не пинать за гамно-код, а помочь, так как я не профессионал.
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
Вообще классная штука отладчик. Очень рекомендую пользоваться.

Беглый взгляд показывает, что Вы сохраняете данные в метаполе с именем _gift_product_id а читаете из _gift_product_ids обратите внимание на последнюю букву в назывании.

Отладчик бы вам это показал.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы