私はadd_actionを通してショートコードを挿入しようとしています:
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;
}
しかし、ショートコードが表示された後にgettinエラーが表示されます。
キャッチされていないエラー:/home/dev/wp-content/themes/dummy-child/woocommerce/single-product/up-sells.php:25のnullでメンバー関数get_upsells()を呼び出し
上記のエラーに関連する行:
if ( ! $upsells = $product->get_upsells() ) {
return;
}
Source: https://github.com/woocommerce/woocommerce/blob/master/templates/single-product/up-sells.php
だから私は思う:
ショートコード自体は正しく表示されますが、スクリプトが上記のエラーで実行を停止します
私がreturn/echo-ingプレーンテキストまたはhtmlでquotation_form関数を出力しようとしたとき、それはエラーなしで完全に動作します
私の質問です:WooCommerceテンプレートにショートコードを挿入するための正しい方法は?それは可能ですか?
ありがとうございました
私は汚い方法でこれを解決しました..他の誰かがより効率的な解決策、上記の問題に対する私の最終的な作業コードを提供できることを願っています:
$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;
}
だから私は関数の外do_shorcodeを移動し、グローバル変数として宣言します。問題は、Wordpressページの外側で宣言すると$ produk変数が機能しなくなることです。そのため、製品のタイトルの代わりにstr_replaceを使用します。
あなたの問題は$ product変数が定義されていないことです。 2つの解決策があります。
global $product;
を書きます。global $product; $product_obj = new WC_Product_Factory(); $product = $product_obj->get_product( "insert product id" );
。関数の冒頭にも書いてください。