在 Divi 主题生成器中动态提取 WooCommerce 产品数据的自定义帖子类型?

问题描述 投票:0回答:1

我正在与 woocommerce、ACF 和 divi 合作。 我正在创建一个图书馆/评论网站,我希望制作一个自定义帖子类型的书评,它会提取 wooCommerce 产品数据(书籍)并使用 Divi Theme Builder 对其进行样式设置。

书评自定义帖子类型当前包含以下自定义字段。

  • 评论
  • 评分
  • 预订帖子对象产品

我为所有书评帖子类型创建了产品、自定义帖子类型和主题生成器。

当我添加 divi woo 模块时,如何使用帖子对象字段指定在自定义帖子类型上选择的产品?这是否可能,或者我是否需要通过过滤器/操作/短代码设置产品才能正确拉入项目?

wordpress woocommerce advanced-custom-fields divi
1个回答
0
投票

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)。

来源:Divi Booster - 在 Divi 的 Woo 模块中的产品字段上启用动态内容

© www.soinside.com 2019 - 2024. All rights reserved.