2016-09-28 13 views
0

私はこの1つで私の脳を荒らしています。WooCommerceはショップのページから特定の商品属性を除外します

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

これはうまく動作し、すべての製品の属性を表示しますが、私はしたいが:現在、(製品ページと混同しないように)私が使用しているすべてのカスタム製品はショップページに属性を表示します特定のものを含みます。残念ながら、いずれかの動作しないように

<?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; 
    } 
?> 

:私もthis person'sアドバイスを、次の試してみました。目的の属性を削除することはできましたが、それはすべてのページで削除されました。除外したいのですが、ショップページからのみです。

$属性変数には、この[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_」で始まることになります。タクソノミではない属性には、スラッグの名前(例:「サイズ」)があります。

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

、後者は、あなたが含めたいん属性に基づく属性のカスタムリストを構築するためのものです:

は、ここでは、2つの例のフィルタで、最初は特定の属性を除くためです。

// 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

関連する問題