我正在与 woocommerce、ACF 和 divi 合作。 我正在创建一个图书馆/评论网站,我希望制作一个自定义帖子类型的书评,它会提取 wooCommerce 产品数据(书籍)并使用 Divi Theme Builder 对其进行样式设置。
书评自定义帖子类型当前包含以下自定义字段。
我为所有书评帖子类型创建了产品、自定义帖子类型和主题生成器。
当我添加 divi woo 模块时,如何使用帖子对象字段指定在自定义帖子类型上选择的产品?这是否可能,或者我是否需要通过过滤器/操作/短代码设置产品才能正确拉入项目?
Divi Woo 模块没有内置方法来允许您根据自定义字段设置产品。一种方法是在 Woo 模块内的产品选择器上启用动态内容支持,然后从动态内容菜单中选择自定义字段。
您可以使用以下 PHP 代码在 Divi Woo Modules 的产品字段上启用动态内容支持:
// === Enable On Woo Product Pickers ===
class EnableDynamicContentOnWooProductPickers {
private $module_slugs = array(
'et_pb_wc_description',
'et_pb_wc_add_to_cart',
'et_pb_wc_gallery',
'et_pb_wc_images',
'et_pb_wc_additional_info',
'et_pb_wc_breadcrumb',
'et_pb_wc_cart_notice',
'et_pb_wc_meta',
'et_pb_wc_price',
'et_pb_wc_rating',
'et_pb_wc_related_products',
'et_pb_wc_reviews',
'et_pb_wc_stock',
'et_pb_wc_tabs',
'et_pb_wc_title',
'et_pb_wc_upsells'
);
public function __construct() {
foreach ($this->module_slugs as $slug) {
\add_filter('et_pb_all_fields_unprocessed_' . $slug, array($this, 'enable_on_product_field'));
}
\add_filter('wp_footer', array($this, 'dynamic_content_icon_styles'));
}
public function enable_on_product_field($fields) {
if (isset($fields['product']) && is_array($fields['product'])) {
$fields['product']['dynamic_content'] = 'text';
}
return $fields;
}
public function dynamic_content_icon_styles() {
if (is_admin() || !empty($_GET['et_fb'])) {
?>
<style>
/* Reposition the dynamic content icon to avoid covering the select controls */
.et-fb-settings-option-dynamic__button--select_product {
right: 24px !important;
}
/* Enabling dynamic content makes the AI button display, so hide it */
.et-db #et-boc .et-l button.et-fb-settings-option-ai__button--select_product {
display: none;
}
/* Hide / replace the warning message shown when dynamic content is deactivated */
.et-fb-option--select-product .et-fb-option--warning {
visibility: hidden;
height: 0 !important;
overflow: hidden;
margin: 0 !important;
padding: 0 !important;
}
.et-fb-option--select-product:has(.et-fb-option--warning)::after {
content: "Please save these module settings and reopen to restore this setting.";
display: block;
color: #333;
font-size: 13px;
font-weight: 600;
background-color: #f9f9f9;
padding: 10px;
margin-top: 10px;
}
</style>
<?php
}
}
}
new EnableDynamicContentOnWooProductPickers();
请注意,它假定自定义字段包含产品 ID(即产品的 WordPress 帖子 ID)。