Woocommerce:我为什么要使用do_action woocommerce_before_shop_loop_item等?

时间:2018-04-05 10:13:23

标签: loops woocommerce shop

我正在学习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 个答案:

答案 0 :(得分:1)

正如你所说的那样,这两种方法都适合你,但是以适当的方式使用第二种方法有很大的优势:

如果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

答案 1 :(得分:0)

正如您所看到的,我有两个不同包装器的块。我的wrapper_start和wrapper_end应该怎么样?同一个文件。我在谈论这个行动:do_action(&#39; woocommerce_before_main_content&#39;);

    <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(&#39; woocommerce_featured_product_add_to_cart&#39;,&#39; woocommerce_template_loop_add_to_cart&#39;,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>