英文:
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>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论