为什么我的WooCommerce短代码出现在页面顶部?

huangapple go评论76阅读模式
英文:

Why is my woocommerce shortcode appearing at the top of the page?

问题

在我的产品页面上,我已经移除了相关产品部分:

remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);

因此,我可以通过短代码将其添加回页面的不同部分。

我的短代码只是调用了函数 woocommerce_output_related_products,之前运行得很完美,直到最近的更新导致它抛出错误。

错误是因为出于某种原因,它不能再访问全局变量 $product 了。

因此,我在我的短代码函数中添加了以下内容:

global $product;
if( ! is_a($product, 'WC_Product') ) {
    $product = wc_get_product( get_the_id() );
}
woocommerce_output_related_products();

这修复了错误,现在再次渲染产品,但是将它们放在页面的顶部而不是短代码所在的位置。如何解决这个问题?

英文:

On my product page, I have removed the related products section:

remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);

So I can add it back to a different part of the page via shortcode.

My shortcode simply called the function woocommerce_output_related_products and worked perfectly until a recent update caused it to throw an error.

The error was that for some reason it wasn't able to access the global variable $product anymore.

So to my shortcode function I added:

global $product;
if( ! is_a($product, 'WC_Product') ) {
	$product = wc_get_product( get_the_id() );
}
woocommerce_output_related_products();

This fixed the error and now renders the products again, however in puts them at the very top of the page instead of where the shortcode is located. How do I fix this?

答案1

得分: 0

在短代码中,您需要返回内容而不是回显它,woocommerce_output_related_products 函数会回显。您可以使用 ob_start()ob_get_clean() 来返回内容。

global $product;
if( ! is_a($product, 'WC_Product') ) {
    $product = wc_get_product( get_the_id() );
}
ob_start();
woocommerce_output_related_products();
return ob_get_clean();
英文:

In a shortcode you need to return the content not echo it, the woocommerce_output_related_products function echos. You can use ob_start() and ob_get_clean() to return instead.

global $product;
if( ! is_a($product, 'WC_Product') ) {
    $product = wc_get_product( get_the_id() );
}
ob_start();
woocommerce_output_related_products();
return ob_get_clean();

</details>



huangapple
  • 本文由 发表于 2023年5月28日 19:38:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/76351291.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定