Fehler do_shortcode in WooCommerce Vorlage

Ich versuche, Shortcode über add_action einzufügen:

add_action('woocommerce_single_product_summary', 'quotation_form', 61); function quotation_form() { $produk = get_the_title(); $shortkode = sprintf( '[zendesk_request_form size="3" group="extra-field" subject="Quotation For %s"]', $produk ); $shortkode = do_shortcode( $shortkode ); echo $shortkode; } 

Aber es kommt zu einem Fehler nach dem angezeigten Shortcode:

Uncaught Error: Aufruf einer Memberfunktion get_upsells () bei null in /home/dev/wp-content/themes/dummy-child/woocommerce/single-product/up-sells.php:25

Die Zeile mit dem obigen Fehler:

 if ( ! $upsells = $product->get_upsells() ) { return; } 

Source: https://github.com/woocommerce/woocommerce/blob/master/templates/single-product/up-sells.php

Also ich denke:

  1. Der Shortcode selbst wird korrekt angezeigt, aber der Scriptstop wird mit dem obigen Fehler ausgeführt

  2. Als ich versuchte, die function quotation_form mit return / echo-plain text oder html auszugeben, funktionierte es perfekt und ohne Fehler

Meine Frage ist: Wie ist der richtige Weg, um Shortcode in WooCommerce Vorlage einzufügen? Ist es möglich, das zu tun?

Vielen Dank

Solutions Collecting From Web of "Fehler do_shortcode in WooCommerce Vorlage"

Ich habe das mit einem schmutzigen Weg getriggers .. hoffe, dass jemand anderes eine effizientere Lösung anbieten kann, meinen letzten Arbeitscode für das obige Problem:

 $shortkode = '[zendesk_request_form size="3" group="extra-field" subject="Quotation For -wkwkwk-"]'; $shortkode = do_shortcode( $shortkode ); add_action('woocommerce_single_product_summary', 'quotation_form', 61); function quotation_form() { $produk = get_the_title(); global $shortkode; $shortkode = str_replace("-wkwkwk-", $produk, $shortkode); echo $shortkode; } 

Also ziehe ich do_shorcode outside function aus und deklariere es als globale Variable. Das Problem ist, dass meine $ produk-Variable nicht funktionieren wird, wenn sie außerhalb der WordPress-Seite deklariert wird, also verwende ich str_replace, um den Vorprodukttitel zu ersetzen

Ihr Problem ist, dass die Produktvariable $ nicht definiert ist. Ich sehe zwei mögliche Lösungen:

  • Wenn Sie den Shortcode nur auf einer Produktseite rendern, schreiben Sie global $product; zu Beginn Ihrer function.
  • Andernfalls müssen Sie definieren, welches Produkt Sie nehmen möchten: global $product; $product_obj = new WC_Product_Factory(); $product = $product_obj->get_product( "insert product id" ); global $product; $product_obj = new WC_Product_Factory(); $product = $product_obj->get_product( "insert product id" ); . Schreiben Sie dies auch am Anfang der function.