2017-08-26 32 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