我使用Woocommerce "精选产品"块WordPress古腾堡创建一个展示3产品在我的首页。我看到,Woocommerce不使用短代码,但页面本身包括一个段落,看起来像这样:
<!-- wp:woocommerce/handpicked-products {"contentVisibility":{"image":true,"title":true,"price":false,"rating":false,"button":false},"orderby":"menu_order","products":[181,225,179]} /-->"
我想在页面加载时动态改变产品(随机洗牌)。不幸的是,在整个PHP类HandpickedProducts,AbstractProductGrid,AbstractDynamicBlock等中,我没有看到动态改变Render参数的钩子。
所以我找到了一个可行的解决方案:为了直接替换WordPress Post本身的产品属性,因此我实现了这个钩子:
function my_the_post_action(&$pobj) {
$pobj->post_content = str_replace('[181,225,179]', '[225, 220, 222]', $pobj->post_content );
}
add_action('the_post', 'my_the_post_action' );
它实际上在wp:woocommerce/handpicked-products段落中被替换,但没有生效。为什么Woocommerce不考虑新的产品ID作为渲染块的参数?
谢谢!
1条答案
按热度按时间lx0bsm1f1#
而不是修改“块”输入通过页面编辑器在页面加载在头版-我想出了一个更好和更干净的选项IMHO -通过简单地呈现这样一个块在客户短代码。
下面的代码首先包含我从数据库中随机挑选3个产品的部分,这些产品的产品标签设置为“Featured”,以便用户可以自己决定哪些产品可供选择......然后我创建“Handpicked Products”块并呈现它: