2017-05-15 3 views
0

Einig individuellen Codes ich für WooCommerce geschrieben habe nicht ordnungsgemäß nach der Aktualisierung arbeiten 3. In diesem speziellen Fall WooCommerce, es ist der woocommerce_available_variation Filter. Ich habe es verwendet, um Produktvariationsbeschreibungen basierend auf den Produktattributen dynamisch einzufügen.woocommerce_available_variation Filter funktionieren nicht mehr nach WooCommerce 3 Update

Wie nun den ich diese Fehlermeldung immer bin:

Abfangbare fatale Fehler: Objekt der Klasse WC_Product_Download nicht zu bespannen in/home/silent48/public_html/wp/wp-content/plugins/WooCommerce umgewandelt werden könnte /includes/wc-product-functions.php on line 376

Was müsste ich mit dem folgenden Code tun, um es mit 3.0 kompatibel zu machen?

add_filter('woocommerce_available_variation', 'change_variation_descriptions'); 
function change_variation_descriptions($descriptions) { 


global $post, $woocommerce; 


    $basicmp3des = '<div class="licensedetails"> 
        <li>-Delivered in mp3 format instantly after purchase</li> 
        <li>-Synchronization rights are granted</li> 
        <li>-One commercial use is permitted (ie: mixtape, album, etc)</li> 
        <li>-You may distribute up to 5000 profitable units</li> 
        <li>-Includes non-exclusive contract agreement (e-signed at checkout)</li> 
        <li>-Send me a quote to inquire about Exclusive License purchase!</li> 
        </div>';  





    foreach ($descriptions as $description) { 
     $variation = wc_get_formatted_variation($description, true); 


      if (strpos($variation, 'Basic License') !== false && strpos($variation, 'mp3') !== false) { 
        $descriptions['variation_description'] = $basicmp3des; 
      } 

    } 

      return $descriptions;  
} 
+1

Ich bin mir ziemlich sicher, dass 'woocommerce_available_variation' hat ein Array und keinen Array Variations Objekte immer, so einen' foreach() 'laufen und solche Veränderung zu erwarten einen Fehler wahrscheinlich verursacht. Worauf beziehen sich die "Basislizenz" und "mp3"? Sind diese Produktattribute? Ich kann einfacher sein, die Beschreibung direkt zu filtern, aber ich würde wissen müssen, wie man seinen Text zu den gewünschten Varianten bedingt hinzufügt. – helgatheviking

+0

Hallo Helgatheviking. Das ist die Sache, es war alles gut in woocommerce 2.x. Und ja, ich verkaufe Musikdateien nach Dateiformat und Lizenztyp. Der ursprüngliche Code war viel länger, aber ich habe ihn verkürzt, um nur eine Beschreibung und eine Variationskombination anzuzeigen. Insgesamt habe ich 5 Lizenztypen und 2 Dateiformate als Attribute. Ich war ziemlich sicher, dass es einen angemesseneren Weg gab, dies zu tun, aber es war die erste Methode, mit der ich arbeitete, also habe ich mich nie darum gekümmert, es zu ändern. – isk

Antwort

1

Hier sind zwei Ansätze ..... Ich bin nicht zu Hause und kann sie jetzt nicht testen. Zuerst können wir versuchen, zu aktualisieren, was Sie für die Struktur des Datenarrays haben müssen, das übergeben wird. In beiden Fällen versuche ich zu überprüfen, ob der Variation das korrekte Attribut zugewiesen wurde, aber das ist der Teil, den ich nicht vollständig testen kann, so dass die Bedingung möglicherweise nicht ausschneiden/einfügen bereit ist. Wenn es nicht funktioniert, können Sie einen Blick auf var_dump($attributes); werfen oder wenn Sie Fehlerprotokollierung aktiviert haben error_log(json_encode($attributes)), um zu sehen, was die Attributschlüssel/Wert-Paare wirklich sind.

add_filter('woocommerce_available_variation', 'change_variation_descriptions', 10, 3); 
function change_variation_descriptions($data, $product, $variation) { 

    // Returns array of attribute name value pairs. Keys are prefixed with attribute_, as stored. 
    $attributes = $variation->get_attributes(); 

    if(isset($attributes['pa_license-options'] && 'basic-license' == $attributes['pa_license-options'] && isset($attributes['pa_delivery-format']) && 'mp3' == $attributes['pa_delivery-format'])) { 
     $data['variation_description'] = '<div class="licensedetails"> 
        <li>-Delivered in mp3 format instantly after purchase</li> 
        <li>-Synchronization rights are granted</li> 
        <li>-One commercial use is permitted (ie: mixtape, album, etc)</li> 
        <li>-You may distribute up to 5000 profitable units</li> 
        <li>-Includes non-exclusive contract agreement (e-signed at checkout)</li> 
        <li>-Send me a quote to inquire about Exclusive License purchase!</li> 
        </div>';  

    } 

    return $data;  
} 

Und das nächste, ich denke, wir können nur die Variation Beschreibung die ganze Zeit filtern:

add_filter('woocommerce_product_get_description', 'kia_filter_description', 10, 2); 
function kia_filter_description($desc, $product) { 
    if($product->is_type('variation')) { 
     // Returns array of attribute name value pairs. Keys are prefixed with attribute_, as stored. 
     $attributes = $product->get_attributes(); 

     if(isset($attributes['pa_license-options'] && 'basic-license' == $attributes['pa_license-options'] && isset($attributes['pa_delivery-format']) && 'mp3' == $attributes['pa_delivery-format'])) { 
      $desc .= '<div class="licensedetails"> 
        <li>-Delivered in mp3 format instantly after purchase</li> 
        <li>-Synchronization rights are granted</li> 
        <li>-One commercial use is permitted (ie: mixtape, album, etc)</li> 
        <li>-You may distribute up to 5000 profitable units</li> 
        <li>-Includes non-exclusive contract agreement (e-signed at checkout)</li> 
        <li>-Send me a quote to inquire about Exclusive License purchase!</li> 
        </div>';  
     } 

    } 
    return $desc; 
} 

EDIT-Code aktualisiert Attribut und Begriff Schnecken verwenden, um das Setup des OP entsprechen.

+0

Danke, ich habe an der ersten Option gebastelt. Es gelang mir so weit zu kommen, die Beschreibung erfolgreich anzuzeigen, wenn die Variation ein Attribut hat, das durch Korrigieren der Attribut-Slug-Namen gesetzt wird. ** $ attributes ['attribute_license'] ** geändert zu ** $ attributes ['pa_license-options'] **, und ** $ attributes ['attribute_format'] ** zu ** $ attributes ['pa_delivery-format' ] **. Alles, was bleibt, ist herauszufinden, wie man nach bestimmten Attributen sucht. Die ** 'Basic License' == $ attributes ['pa_delivery-format'] ** Methode scheint leider nicht zu funktionieren. – isk

+0

Sind Ihre Attribute eine Taxonomie? Möglicherweise müssen Sie den Begriff Slug verwenden (die ‚Grund-Lizenz‘ anstelle des Begriffs Namen ‚Basislizenz‘ sein könnte. Ich an diesem Punkt nicht sicher bin. – helgatheviking

+0

Bingo! Änderte ich die Basislizenz Attribut Titel es Slug-Format und es funktioniert. Ich weiß nicht, warum ich nicht an diesen lol dachte. Danke Helga! Ich habe deine Antwort mit den richtigen Nacktschnecken aktualisiert und sie als die gewählte Antwort markiert. – isk

Verwandte Themen