WooCommerce模板中出现错误DO_SHORT CODE

时间:2016-10-24 作者:Asisten

我正在尝试通过add\\u操作插入短代码:

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;
}
但在显示短代码后出现错误:

未捕获错误:在/home/dev/wp-content/themes/dummy-child/woocommerce/single-product/up-sells中调用成员函数get\\u upsells()。菲律宾比索:25

与上述错误相关的行:

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

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

所以我认为:

短代码本身显示正确,但脚本停止执行,出现上述错误

当我尝试输出带有返回/回显纯文本或html的Quotence\\u form函数时,它工作正常,没有任何错误

我的问题是:如何在WooCommerce模板中插入短代码?有可能这样做吗?

非常感谢。

2 个回复
SO网友:Asisten

我用肮脏的方式解决了这个问题。。希望其他人能提供更高效的解决方案,我的最终工作代码针对上述问题:

$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\\u shorcode移到函数外部,然后将其声明为全局变量。问题是如果在Wordpress页面外声明$produk变量,它将无法工作,因此我使用str\\u replace替换前产品标题

SO网友:Pascal Knecht

您的问题是没有定义$product变量。我认为有两种可能的解决方案:

如果您只在产品页面上呈现短代码,请编写global $product; 在函数的开头global $product; $product_obj = new WC_Product_Factory(); $product = $product_obj->get_product( "insert product id" );. 在函数的开头也写下这句话

相关推荐

我可以将参数传递给Add_ShortCode()函数吗?

正如标题所述,我需要向add_shortcode() 作用换句话说,我传递的那些参数将在的回调函数中使用add_shortcode(). 我该怎么做?请注意,这些与以下结构无关[shortcode 1 2 3] 哪里1, 2, 和3 是用户传递的参数。在我的情况下,参数仅用于编程目的,不应由用户负责。谢谢