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, я предлагаю прочитать следующее:
Как видите, у меня есть два блока с разными обертками. Как должны выглядеть мои 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>