• Прошу помощи по WooCommerce. Вот у нас есть стандартная страница витрины
    mysite.ru/shop/
    Все товары оборачиваются в список li. Мне нужно избавиться от li и изменить обертку так, чтобы каждый товар был таким.

    <div class="col-md-4 col-sm-4 col-xs-12">
    <div  class="b-catalog__goods">
    <div class="b-image">
    <a href="">
    <img src="img/picture/product/product_25.jpg" class="img-responsive" alt=""></a>
    </div>
    <div class="b-character">
    <div class="b-description">Паста для укладки волос средней фиксации 85мл</div>
    <div class="b-price">
    <span class="b-price__price">899</span>
    <i class="fa fa-rub"></i>
    </div>
    <div class="b-discount">
    <span class="b-discount__price">855</span>
    <i class="fa fa-rub"></i><a href="#" class="b-discount__price__user">Цена для пользователя</a>
    </div>
    <a href="#"class="b-basket__cart b-basket__icons"></a>
    </div>
    </div>
    </div>

    По логике вещей из каталога плагина копирую этот файл woocommerce/archive-product.php
    Лезу дальше.
    В файле нахожу этот код

    <?php woocommerce_product_subcategories(); ?>
    <?php while ( have_posts() ) : the_post(); ?>
    <?php wc_get_template_part( 'content', 'product' ); ?>
    <?php endwhile; // end of the loop. ?>

    И как говориться, приплыли))
    Где этот кусок, что вызывается в wc_get_template_part ?

    В папке loop там бред какой-то. (Или я не туда смотрю)… но там вроде не то… Как мне придти к интересующей меня структуре?
    Заранее спасибо за помощь, терпение к глупым вопросам и понимание…. ))

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    И как говориться, приплыли))
    Где этот кусок, что вызывается в wc_get_template_part ?

    Не очень понял куда приплыли) Файл /wp-content/plugins/woocommerce/templates/content-product.php не подошел?

    Ну а <ul>...</ul>, видимо в файлах loop/loop-start.php и loop/loop-end.php.

    content-product.php
    Там куча хуков и какой-куда ссылается — не всегда понятно… А самое главное, целиком обертку в них не сменить(( т.е. всплывают функции вукомерцовские, которые хоть часть оформления своего, да тащат(( а мне нужны только данные. Очень не удобно((

    Я может велосипед изобретаю, но пока я вышел из положения так.

    <?php
    $args = array(
    'post_type' => 'product',
    'orderby'  => 'date',
    'order'=> 'DESC',
    'posts_per_page' => -1 // сколько выводить товаров
    );
    $featured_query = new WP_Query( $args );
    if ($featured_query->have_posts()) :
    while ($featured_query->have_posts()) :     	 $featured_query->the_post();
    $product = get_product( $featured_query->post->ID ); ?>
    <div class="col-md-4 col-sm-4 col-xs-12">
    <div class="b-catalog__goods">
    <div class="b-image">
    <a href="">
    <?php the_post_thumbnail('attachment-shop_catalog', array('class' => 'img-responsive'));?></a>
    </div>
    <div class="b-character">
    <div class="b-description"><?php the_title(); ?></div>
    <div class="b-price">
    <span class="b-price__price"><?php echo $product->get_regular_price(); ?></span>
    <i class="fa fa-rub"></i>
    </div>
    <div class="b-discount">
    <span class="b-discount__price"><?php echo $product->get_price(); ?></span>
    <i class="fa fa-rub"></i>
    <a href="#" class="b-discount__price__user">Цена для пользователя</a>
    </div>
     <a href="<?php echo esc_url( $product->add_to_cart_url() ); ?>" class="b-basket__icons" data-quantity="<?php echo esc_attr( isset( $quantity ) ? $quantity : 1 ); ?>" data-product_id="<?php echo esc_attr( $product->id ); ?>" data-product_sku="<?php echo esc_url( $product->get_sku() ); ?>"></a>
    </div>
    </div>
    </div>
    <?php endwhile; endif; ?>
    <?php wp_reset_query(); /* Remember to reset */ ?>

    и не надо по кучи файлов прыгать. все в одном.
    Вот только пагинацию как прикрутить сюда…

    Кажется начинаю догонять принцип вукомерца.
    Скажите. Вот простой пример.
    Есть в файле woocommerce/includes/wc-template-functions.php
    функция

    function woocommerce_template_loop_product_title() {
        echo '<h3>' . get_the_title() . '</h3>';
      }

    Могу ли я ее переопределить в шаблоне? Как правильно это сделать?
    Только в function.php ее засовывать? (просто я пробовал для удобства засовывать в файлы папки woocommerce что в шаблон копируем, Но к сожалению не катит, только в function.php когда — тогда катит.

    Могу ли я ее переопределить в шаблоне?

    PHP не позволяет переопределять функции.

    PHP то не позволяет, но в файле woocommerce/includes/wc-template-functions.php я вижу много таких конструкций:

    if ( ! function_exists( 'woocommerce_show_product_loop_sale_flash' ) ) {
     function woocommerce_show_product_loop_sale_flash() {
      wc_get_template( 'loop/sale-flash.php' );
     }
    }

    Т.е. я так понял, то по задумке сделано, чтобы пользователи их переопределяли) Методом экспериментов я вижу, что это реально так и есть. Запихиваю в function.php свою woocommerce_show_product_loop_sale_flash и все. функция уже подгружается моя, а не woocommerce

    чтобы пользователи их переопределяли

    Не совсем. Чтобы можно было определить до того, как выполнение дойдет до этого места. Это никак не пере, это скорее пред. И если такая конструкция не предусмотрена, то подменить функцию нельзя без вмешательства в код движка или плагина.

    p.s. В программировании не то что слова, а даже знаки препинания имеют значение.

Просмотр 6 ответов — с 1 по 6 (всего 6)

Тема «WooCommerce — изменить вывод списка товаров.» закрыта для новых ответов.