如何在Divi主题构建器中为Book Review自定义类型指定关联WooCommerce产品?
在Divi中通过ACF文章对象字段关联WooCommerce产品的实现方法
Divi默认的WooCommerce模块没有直接读取ACF自定义字段的选项,必须借助自定义短代码或钩子来实现,下面是两种可行的实用方案:
方案一:自定义短代码直接输出关联产品
这种方法最直接,通过短代码获取当前Book Review文章的关联产品,再渲染产品内容:
- 在主题的
functions.php或自定义插件中添加以下代码:
function book_review_related_product_shortcode() { // 获取当前文章的ACF关联产品字段(替换成你的实际字段名) $related_product = get_field('book_post_object_product'); if (!$related_product || !is_a($related_product, 'WP_Post')) { return '暂无关联图书'; } // 调用Divi的Woo产品短代码渲染单个产品 ob_start(); echo do_shortcode('[et_pb_woo_products type="id" ids="' . $related_product->ID . '" posts_per_page="1"]'); return ob_get_clean(); } add_shortcode('book_related_product', 'book_review_related_product_shortcode');
- 在Book Review的Divi主题构建器模板中,添加代码模块,输入短代码
[book_related_product]即可展示关联产品。
方案二:用钩子修改Divi Woo模块的查询参数
如果想直接用Divi自带的Woo模块,可通过过滤器修改模块的查询条件,让它自动读取当前文章的关联产品:
- 在主题
functions.php中添加以下代码:
function modify_divi_woo_module_for_book_review($query_args, $module) { // 仅在Book Review自定义文章类型页面生效,且针对Woo产品模块 if (is_singular('book_review') && $module->slug === 'et_pb_woo_products') { $related_product = get_field('book_post_object_product'); if ($related_product && is_a($related_product, 'WP_Post')) { // 将查询参数改为关联产品的ID $query_args['post__in'] = array($related_product->ID); $query_args['posts_per_page'] = 1; } } return $query_args; } add_filter('et_pb_woo_products_query_args', 'modify_divi_woo_module_for_book_review', 10, 2);
- 在Book Review的模板中添加普通的Divi Woo产品模块,无需额外设置,模块会自动加载当前文章的关联产品。
注意事项
- 确保ACF字段名称
book_post_object_product和你实际创建的字段别名一致,避免拼写错误。 - 建议将代码放在子主题的
functions.php中,防止主题更新导致代码丢失。 - 测试前清空站点缓存,确保代码生效。
内容的提问来源于stack exchange,提问作者TheBreaker
相关产品推荐
相关产品推荐

