2017-08-26 77 views
1

继续浏览this后操作woocommerce菜单。
这个插件代码:wordpress插件函数发射两次

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); 

闪光两次。

为什么? 感谢名单

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

+0

您是否尝试使用Query Monitor插件进行调试? https://wordpress.org/plugins/query-monitor/ –

+0

AFA查询监视器插件去请参阅原始问题的编辑与截图...一个查询'tutsplus_product_subcategories()' – Jadeye

回答

0

Woocommerce不会允许你同一个标签source注册两个事件。因此,如果文件加载了两次(例如,如果使用include/require而不是include_once/require_once),它可能会导致此问题:无论如何检查它(!)。

挂钩本身在woocommerce中被调用两次,所以在技术上可能挂钩被调用两次。但是我不知道是否两个模板都在同一个调用中加载......但是您可能已经在不知道的情况下注册了两次调用:因此请检查您的代码是否有另一个调用此函数的函数,也许使用不同的代码(woocommerce_before_shop_loop )。

+0

这是这个插件操作的唯一要求,因为这是唯一的'php'代码...除了'css' – Jadeye

0

更新:

与您的代码你只是在做什么WooCommerce已经在做,这就是为什么你看到重复的类别/子菜单项和你说,它的“触发了两次”。

无论如何,如果你把你的代码,然后你想删除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); 

请,你的问题不是很明确的,详细的,我们真的不知道你有什么问题,不能帮助您进一步比...

+0

指出......除去'$ args' ....'notice'函数只显示一次...尝试'has_action'&'did_action'但没有任何内容......至于这个问题,我不想重载代码,但链接说明了这一切...如果你可以请看一下,这将有所帮助......感谢你的时间 – Jadeye

+0

Ps 'if(has_action('woocommerce_before_shop_loop','tutsplus_product_subcategories')){ add_action('woocommerce_before_shop_loop','tutsplus_product_subcategories',50); }“根本不会触发该功能,但如果我否定它的作用......我在哪里出错? – Jadeye

+0

@Jadeye我已经更新了我的答案...请看看它。谢谢 – LoicTheAztec