wordpress插件功能触发两次

时间:2017-08-26 17:47:11

标签: php wordpress plugins woocommerce hook-woocommerce

点击this帖子操作woocommerce菜单 这个插件代码:

function product_subcategories( $args = array() ) {
    $parentid = get_queried_object_id();

    $args = array(
        'parent' => $parentid
    );

    $terms = get_terms( 'product_cat', $args );

    if ( $terms ) {

        echo '<ul class="product-cats">';

            foreach ( $terms as $term ) {

                echo '<li class="category">';                 

                    woocommerce_subcategory_thumbnail( $term );

                    echo '<h2>';
                        echo '<a href="' .  esc_url( get_term_link( $term ) ) . '" class="' . $term->slug . '">';
                            echo $term->name;
                        echo '</a>';
                    echo '</h2>';

                echo '</li>';


        }

        echo '</ul>';

    }     
}
add_action( 'woocommerce_before_shop_loop', 'product_subcategories', 50 );

发射两次。

为什么? 感谢名单

EDIT 原帖子链接:Display WooCommerce Categories, Subcategories, and Products in Separate Lists Query Monitor woocommerce_before_shop_loop

2 个答案:

答案 0 :(得分:0)

Woocommerce确实允许您使用相同的标记source注册两个事件。因此,如果文件被加载两次(例如,如果你使用include / require而不是include_once / require_once),它可能会导致这个问题:无论如何都要检查它(!)。

钩子本身在woocommerce中被调用两次,所以从技术上讲,钩子可能被调用两次。但我不知道两个模板是否都在同一个调用中加载...但是你可能已经注册了两次调用,因为知道:因此请检查你的代码是否有另一个调用此函数,可能使用不同的标记(除了{ {1}})。

答案 1 :(得分:0)

<强>更新

使用您的代码,您只是在做WooCommerce已经在做的事情,这就是为什么您看到重复的类别/子类别菜单项,并且您说它已经被解雇了两次&#34;。

无论如何,如果你保留你的代码,然后你想删除那个WooCommerce生成的类别/子类别项,你可以使用这个钩子函数:

add_filter('woocommerce_product_subcategories_args', function( $args ){
    $args['taxonomy']= '';
    return $args;
});

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

  

这将删除WooCommerce重复项目......

原始回答:

woocommerce_before_shop_loop挂钩:

  • 没有参数(无需添加 $args = array()
  • 被多次调用,但只触发一次。检查它替换你的代码:
add_action( 'woocommerce_before_shop_loop', function(){
    wc_print_notice('test message', 'notice');
}, 50 );

请注意,由于您的问题不是非常明确和详细,我们真的不知道您的问题是什么,并且不能为您提供更多帮助...