Woocommerce:动态更改WC渲染块的属性/参数



我使用Wordpress Gutenberg中的Woocommerce " handpick products "块在我的Frontpage上创建了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类handpickproducts, AbstractProductGrid, AbstractDynamicBlock等,我没有看到一个钩子来动态地改变渲染参数…

所以我发现可能的解决方案是:为了直接替换Wordpress Post本身的product属性,因此我实现了这个钩子:

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/handpick -products段落中被替换,但不生效。为什么Woocommerce不考虑新的Product id作为他的渲染块的参数?

谢谢! !

不修改"在Frontpage的Pageload上通过页面编辑器输入-我提出了一个更好和更干净的选择-通过简单地在客户短代码中呈现这样的块。

下面的代码由以下部分组成:首先,我从数据库中随机选择3个具有Product-Tag "Featured"设置以便用户可以自行决定哪些产品可供选择…然后我创建了我的"精选产品"。阻塞并渲染:

add_shortcode('my_featured_prods', function($atts, $content = null)
{
// Get list of all Woocommerce products by Tag
$args = array(
'post_type' => 'product',
'posts_per_page' => 3,
'orderby' => 'rand',
'tax_query' => array(
array(
'taxonomy' => 'product_tag',
'field' => 'slug',
'terms' => 'featured'
)
)
);
$products = new WP_Query($args);
$ids = [$fix];
foreach($products->posts as $p)
$ids[] = $p->ID;
// Shuffle array:
shuffle($ids);
// Output Hand Picked Products Widget with my settings ...
$args = (object) [
'editMode' => 0,
'contentVisibility' => (object) [
'image' => 1,
'title' => 1,
'price' => 0,
'rating' => 0,
'button' => 0,
],
'orderby' => 'random',
'products' => $ids,
'alignButtons' => 1,
];
$args = sprintf(
'<!-- wp:woocommerce/handpicked-products %s /-->',
json_encode( $args )
);
return do_blocks($args);
});

最新更新