2016-09-28 139 views
0

我一直在對這個問題大驚小怪。目前,以顯示所有定製產品的商店頁面上的屬性(不與產品頁相混淆),我使用的是:WooCommerce從商店頁面中排除某些產品屬性

function show_attr() { 
    global $product; 
    echo '<div class="attributes">'; 
    $product->list_attributes(); 
    echo'</div>' 
} 

這只是正常,並顯示所有產品屬性,但我只想要包括某些。我也曾嘗試以下this person's建議:

<?php foreach ($attributes as $attribute) : 
    if (empty($attribute['is_visible']) || 'CSC Credit' == $attribute['name'] || ($attribute['is_taxonomy'] && ! taxonomy_exists($attribute['name']))) { 
     continue; 
    } else { 
     $has_row = true; 
    } 
?> 

所以,不幸的是沒有任何工作。我能夠刪除所需的屬性,但它會在每一頁上刪除它,並且我想從商店頁面中排除它只有

我看到$ attribute變量有這[is_visible]條件。有沒有人有任何想法,我可能會刪除該商店頁面上的特定屬性?我處於全面虧損狀態。感謝任何和所有的幫助。

回答

1

正如我在評論中提及您可以通過woocommerce_get_product_attributes過濾器控制任何給定的產品屬性。通過此過濾器的$attributes位於數組的關聯數組中。使用屬性的「slug」作爲數組鍵。例如,var_dump()可能會顯示以下$attributes

array (size=1) 
    'pa_color' => 
    array (size=6) 
     'name' => string 'pa_color' (length=8) 
     'value' => string '' (length=0) 
     'position' => string '0' (length=1) 
     'is_visible' => int 0 
     'is_variation' => int 1 
     'is_taxonomy' => int 1 

如果屬性的分類法中,嵌入將與「PA_」我一直認爲代表着產品的屬性來開頭。一個不是分類的屬性只是它的名字,例如:「size」。

使用WooCommerce Conditional tags您可以專門針對商店頁面上的屬性只有

這裏有兩個例子過濾器,第一個是排除特定屬性:

// Exclude a certain product attribute on the shop page 
function so_39753734_remove_attributes($attributes) { 

    if(is_shop()){ 
     if(isset($attributes['pa_color'])){ 
      unset($attributes['pa_color']); 
     } 
    } 

    return $attributes; 
} 
add_filter('woocommerce_get_product_attributes', 'so_39753734_remove_attributes'); 

而後者是建立基於你希望包括屬性屬性的自定義列表。

// Include only a certain product attribute on the shop page 
function so_39753734_filter_attributes($attributes) { 

    if(is_shop()){ 
     $new_attributes = array(); 

     if(isset($attributes['pa_color'])){ 
      $new_attributes['pa_color'] = $attributes['pa_color'] ; 
     } 

     $attributes = $new_attributes; 

    } 

    return $attributes; 
} 
add_filter('woocommerce_get_product_attributes', 'so_39753734_filter_attributes'); 
+0

啊精彩!這使得這些例子更有意義。感謝您花時間進一步解釋。我非常感謝幫助。 – Kedmasterk

+0

不客氣。 – helgatheviking

0

試試這個!

<?php 
if (is_page('shop')) { 
    foreach ($attributes as $attribute) : 
     if (empty($attribute['is_visible']) || 'CSC Credit' == $attribute['name'] || ($attribute['is_taxonomy'] && ! taxonomy_exists($attribute['name']))) { 
      continue; 
     } else { 
      $has_row = true; 
     } 
    } 
?> 
+0

+1!我剛剛離開工作,但會在早上儘快嘗試。我不敢相信我沒有想到這一點。我是WordPress的新手,所以一切都馬上就來到我身上。明天我會接受這個答案,然後擺動。感謝您的及時迴應! :) – Kedmasterk

+0

很高興幫助! –

+0

我打算回答你需要使用'is_shop()'。我想你也可以過濾'woocommerce_get_product_attributes'來代替編寫自己的循環。 – helgatheviking

相關問題