2016-09-28 2 views
0

Ich habe mein Gehirn auf diesem einen zerbrochen. Derzeit Attribute auf der Shop-Seite alle benutzerdefinierten Produkte angezeigt wird (nicht mit der Produktseite zu verwechseln) Ich verwende:WooCommerce schließt bestimmte Produktattribute von Shop-Seite aus

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

Das funktioniert ganz gut, und zeigt alle Produkteigenschaften, aber ich möchte nur zu schließe bestimmte ein. Ich habe auch versucht, folgende this person's Rat:

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

Damit leider auch nicht funktioniert. Ich konnte das gewünschte Attribut entfernen, aber es löscht es auf jeder Seite, und ich möchte es aus der Shop-Seite nur ausschließen.

Ich sehe, dass die Variable $ Attribut diese [is_visible] Bedingung hat. Hat jemand irgendwelche Ideen, wie ich das für bestimmte Attribute auf der Shop-Seite entfernen könnte? Ich bin total am Ende. Danke für jede Hilfe.

Antwort

1

Wie in meinem Kommentar erwähnt können Sie die Attribute für jeden geben Produkt über die woocommerce_get_product_attributes Filter steuern. Die $attributes Weitergabe durch diesen Filter erfolgt in einem assoziativen Array von Arrays. mit dem "Slug" des Attributs als Array-Schlüssel. Als ein Beispiel könnte ein var_dump() die folgenden $attributes offenbaren.

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 

Wenn das Attribut eine Taxonomie ist, wird der Rohling mit „PA_“ vorangestellt werden, die ich immer davon ausgegangen, habe für Produktattribut stand. Ein Attribut, das keine Taxonomie ist, hat nur seinen Namen für den Slug, zB: "size".

Mit WooCommerce Conditional tags können Sie gezielt die Attribute nur auf der Shop-Seite target.

Hier sind zwei Beispiel-Filter ist die erste ein bestimmtes Attribut für den Ausschluss:

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

Und letzteres ist für eine benutzerdefinierte Liste von Attributen Aufbau basierend auf Attributen Sie einschließen möchten.

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

Ah wunderbar! Dies ist bei den Beispielen viel sinnvoller. Danke, dass Sie sich die Zeit genommen haben, es weiter zu erklären. Ich schätze die Hilfe sehr. – Kedmasterk

+0

Gern geschehen. – helgatheviking

0

Versuchen Sie dies!

<?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! Ich habe gerade die Arbeit verlassen, werde es aber so schnell wie möglich am Morgen versuchen. Ich kann nicht glauben, dass ich nicht darüber nachgedacht habe. Ich bin neu in Wordpress, also kommt alles auf einmal auf mich zu. Werde die Antwort morgen annehmen, sobald ich das aufmache und schwinge. Danke für Ihre schnelle Antwort! :) – Kedmasterk

+0

Froh, dass es geholfen hat! –

+0

Ich wollte antworten, dass Sie 'is_shop()' verwenden müssen. Ich denke, Sie könnten auch 'woocommerce_get_product_attributes' filtern, anstatt eine eigene Schleife zu schreiben. – helgatheviking

Verwandte Themen