Woocommerce: почему я должен использовать do_action woocommerce_before_shop_loop_item и т. Д.?

Я изучаю woocommerce и пытаюсь зациклить список продуктов. Я использовал первый метод, а затем нашел другой, который является предпочтительным. Результат тот же, но я не понимаю, почему мне нужно использовать второй метод вместо первого, который намного проще?

Первый способ:

<div class="col-md-4 product simpleCart_shelfItem text-center">
<a href="<?php the_permalink(); ?>">
    <?php the_post_thumbnail(); ?>
</a>
<div class="mask">
    <a href="<?php the_permalink(); ?>">Quick View</a>
</div>
<a class="product_name" href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

<?php if( $price_html = $product->get_price_html() ): ?>
    <p><a href="<?php echo esc_url($product->add_to_cart_url()); ?>" data-quantity="1" data-product_id="<?php echo esc_attr( $product->id ) ?>" data-product_sku="<?php echo esc_attr( $product->sku ) ?>" class="item_add <?php echo $class; ?>"><i></i> <span class="item_price"><?php echo $price_html ?></span></a></p>
<?php endif; ?>

Второй метод:

<div class="col-md-4 product simpleCart_shelfItem text-center">

<?php do_action('woocommerce_before_shop_loop_item'); ?>       

<?php do_action('woocommerce_before_shop_loop_item_title'); ?>  

<?php do_action('woocommerce_shop_loop_item_title'); ?>         

<?php do_action('woocommerce_after_shop_loop_item'); ?>        

2 ответа

Решение

Как вы сказали, оба метода будут работать для вас, но правильное использование второго метода имеет большое преимущество:

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

сначала откройте свой function.php

function MyCustomDiv (){
  echo '<div class= "col-md-4 product simpleCart_shelfItem text-center">';
  }

function EndyCustomDiv (){
      echo '</div>';
  }

add_action ( 'woocommerce_before_shop_loop_item' ,  'MyCustomDiv');
add_action ( 'woocommerce_after_shop_loop_item' ,  'EndyCustomDiv');

и чтобы понять больше о Wordpres API, я предлагаю прочитать следующее:

https://codex.wordpress.org/Plugin_API

Как видите, у меня есть два блока с разными обертками. Как должны выглядеть мои wrapper_start и wrapper_end? Тот же файл. Я говорю об этом действии: do_action('woocommerce_before_main_content');

    <div class="container">
        <div class="main-content">

            <div class="products-grid">
            <header>
                <h3 class="head text-center">Latest Products</h3>
            </header>

                // first loop starts
                <div class="col-md-4 product simpleCart_shelfItem text-center">
                    <a href="single.html"><img src="images/p1.jpg" alt="" /></a>
                    <div class="mask">
                        <a href="single.html">Quick View</a>
                    </div>
                    <a class="product_name" href="single.html">Sed ut perspiciatis</a>
                    <p><a class="item_add" href="#"><i></i> <span class="item_price">$329</span></a></p>
                </div>      

                <div class="clearfix"></div>
            </div>

        </div>
    </div>

    <div class="other-products">
    <div class="container">

        <h3 class="like text-center">Featured Collection</h3>
             <ul id="flexiselDemo3">

                // second loop starts
                <li><a href="single.html"><img src="images/l1.jpg" class="img-responsive" alt="" /></a>
                    <div class="product liked-product simpleCart_shelfItem">
                    <a class="like_name" href="single.html">perfectly simple</a>
                    <p><a class="item_add" href="#"><i></i> <span class=" item_price">$759</span></a></p>
                    </div>
                </li>

             </ul>

       </div>
   </div>

Могу ли я использовать стандартный цикл wp для второй части и использовать только это в файле functions.php (потому что мне нужна кнопка добавить в корзину): add_action( 'woocommerce_featured_product_add_to_cart', 'woocommerce_template_loop_add_to_cart', 50); Или это не правильный путь?

<ul id="flexiselDemo3">

<?php while($featured_posts->have_posts()): $featured_posts->the_post(); ?>

    <li class="product"><a href="<?php the_permalink() ?>">
            <img src="<?php bloginfo('template_url); ?>/images/l1.jpg" class="img-responsive" alt="" />
        </a>
        <div class="product liked-product simpleCart_shelfItem">
            <a class="like_name" href="<?php the_permalink() ?>"><?php the_title() ?></a>
            <?php do_action('woocommerce_featured_product_add_to_cart') ?>
        </div>
    </li>

<?php endwhile; ?>

</ul> 
Другие вопросы по тегам