提问人:Emma W 提问时间:4/4/2023 最后编辑:Emma W 更新时间:4/4/2023 访问量:88
在帖子内容中使用简码触发 Woocommerce 钩子
Firing a Woocommerce hook using a shortcode in post content
问:
我正在尝试将操作钩子woocommerce_single_product_summary分配给短代码,以便最终用户可以在他们在 Gutenberg 中创建的布局中自由移动页面的整个single_product_summary部分,而不是do_action在模板中的固定位置使用。
我在函数.php中有以下内容:
function getsummary_shortcode( $atts ) {
ob_start();
do_action( 'woocommerce_single_product_summary' );
$woocommerce_single_product = ob_get_clean();
return $woocommerce_single_product;
}
add_shortcode('getsummary','getsummary_shortcode');
但是,这似乎以无限循环的方式输出single_product_summary内容。
真的可以做到这一点吗?我在这里发现了一些帖子,试图做一些与此类似的事情,但没有一个试图做我正在做的事情。
答:
2赞
Scuzzy
4/4/2023
#1
您可能需要取消注册,并在函数回调中重新注册短代码,以防止它被钩子调用getsummary
woocommerce_single_product_summary
function getsummary_shortcode( $atts ) {
remove_shortcode('getsummary');
ob_start();
do_action( 'woocommerce_single_product_summary' );
$woocommerce_single_product = ob_get_clean();
add_shortcode('getsummary','getsummary_shortcode');
return $woocommerce_single_product;
}
add_shortcode('getsummary','getsummary_shortcode');
评论
0赞
Emma W
4/4/2023
非常感谢,这完美地完成了工作!我永远不会弄清楚这一点 - 我没有意识到短代码必须同时添加到短代码本身和短代码之外?
1赞
Scuzzy
4/4/2023
更重要的是,关键是首先调用以防止任何其他内容调用相同的短代码,这就是您在递归循环中看到的内容,然后只需在完成后再次添加它意味着可以在需要时再次使用它。实际上,我觉得在您的嵌套内容中使用了它。remove_shortcode()
do_action( 'woocommerce_single_product_summary' )
[getsummary]
1赞
Emma W
4/4/2023
这是有道理的,谢谢你的解释!是的,用于帖子的实际内容,由用户添加 - 我不确定还有什么可以调用它,但这个项目上正在使用第三方插件 (FooEvents Bookings) 来操作一些调用的功能 - 我怀疑这可能是负责任的,尽管我还没有设法缩小范围。[getsummary]
woocommerce_single_product_summary
评论
[getsummary]