Добавить настраиваемое поле в продукт woocommerce для определенной категории

#php #wordpress #woocommerce

#php #wordpress #woocommerce

Вопрос:

Я пытаюсь добавить настраиваемое поле «Цвет» в свои заказы woocommerce, но это настраиваемое поле должно быть в нескольких определенных категориях, скажем, категории «баллоны», поэтому код внутри functions.php неужели это:

 add_action('woocommerce_before_add_to_cart_button','wdm_add_custom_fields');

                      /**
                      * Adds custom field for Product
                      * @return [type] [description]
                      */
    function wdm_add_custom_fields()
       {

          global $product;
          ob_start();

          $terms = get_the_terms( $product->get_id(), 'product_cat' );

          // Loop through term objects
            foreach( $terms as $term ) {
              if ( "ballons" === $term->slug ) {
        ?>
          <div class="wdm-custom-fields">
            <label>Color </label>
             <select type="text" name="wdm_name">     
                <option value="blue">Blue</option>
                <option value="red">Rojo</option>
                <option value="green">Green</option>      
            </select>
         </div>
         <div class="clear"></div>
    <br>
    
    <?php 
      //  break; // The term match, we stop the loop.
        }
       }        
      ?>
  

Поле выбора появляется во всех продуктах, похоже, что приведенный выше код не ограничивает поле выбора конкретной категорией, любая помощь будет признательна

Комментарии:

1. Вы пробовали просматривать термины: print_r($ terms); чтобы узнать, есть ли «ballons» в списке для каждого продукта

2. да, но ничего не печатает….

3. Вероятно, это из-за выходного буфера (ob_start()). Попробуйте добавить срок как вариант, просто чтобы проверить, » <option value=»»> <?php echo $term; ?> </option>

4. Я сделал, но ничего не печатается, просто пустое место

5. Я бы доверял @LoicTheAztec и использовал его ответ. Очень знающий джентльмен (я предполагаю, что здесь пол).

Ответ №1:

Используйте вместо этого выделенную условную функцию WordPress has_term() следующим образом:

 add_action('woocommerce_before_add_to_cart_button', 'before_add_to_cart_button_custom_fields');
function before_add_to_cart_button_custom_fields() {
    global $post, $product;

    // Here define your terms (can be terms Ids, slugs or names)
    $terms = array('ballons');

    if ( has_term( $terms, 'product_cat' ) ) {
    ?>
    <div class="wdm-custom-fields">
        <label><?php _e("Color", "woocommerce"); ?></label>
        <select type="text" name="wdm_name">
            <option value="blue"><?php _e("Blue", "woocommerce"); ?></option>
            <option value="red"><?php _e("Rojo", "woocommerce"); ?></option>
            <option value="green"><?php _e("Green", "woocommerce"); ?></option>
        </select>
    </div>
    <div class="clear"></div>
    <br>
    <?php
    }
}
  

Код вводится functions.php файл вашей активной дочерней темы (или активной темы). Протестировано и работает.

Вы должны заменить wdm_name просто color везде в своем коде

Комментарии:

1. хороший ответ, однако пока не работает … даже с var_dump ($ terms) он ничего не напечатает

2. @ClaudioMartinez Извините, но я проверил этот код на практике, и он работает… Вы можете видеть это на этом тестовом сервере (с последними версиями WP / WC) для категории товаров «Футболки». Итак, в вашем случае где-то что-то не так, поскольку код работает просто отлично (ваша категория «ballons» должна быть установлена непосредственно для продукта, если нет, код не будет работать, и вам понадобится что-то другое).