为 woocommerce 产品选项卡上的自定义字段设置优先级

Posted

技术标签:

【中文标题】为 woocommerce 产品选项卡上的自定义字段设置优先级【英文标题】:Set priority for custom fields on woocommerce product tabs 【发布时间】:2021-12-12 18:18:54 【问题描述】:

当产品很简单时,我想在常规数据选项卡中添加两个自定义字段。 但是,我希望这些自定义字段出现在列表顶部。

我尝试在钩子中设置优先级,但这不起作用。

所以我有以下内容:

function add_options_simple() 
    global $woocommerce, $post;
    $id = $post->ID;
    $product = wc_get_product($id)->get_type();
    if ($product == 'simple')
    woocommerce_wp_text_input(
        array(
            'id'          => '_brand',
            'label'       => 'Brand',
            'type'        => 'text',
        )
    );
    woocommerce_wp_text_input(
        array(
            'id'          => '_EAN',
            'label'       => 'EAN:',
            'type'        => 'text',
        )
    );
    

add_action( 'woocommerce_product_options_general_product_data', 'add_options_simple',1,3 );

但没有成功。 有什么建议吗?

【问题讨论】:

这个钩子是在 woo 默认字段之后加载的,所以我不这么认为,除非你对其进行硬编码。另一种选择是创建自定义选项卡,您可以在其中设置优先级,并且您的选项卡将首先显示您的字段。 无法在最顶部显示,因为 WooCommerce 中没有提供此功能(除非您要编辑强烈建议不要编辑的核心文件或使用“肮脏的解决方案”)。要应用此 WooCommerce 方式:您可以在销售价格字段之后显示自定义字段,第一种可能是在简单产品的产品常规选项卡上的现有字段之间/之后添加一个字段。 【参考方案1】:

无法将这些字段添加到顶部。如您所见here

但是您可以尝试使用 jQuery。试试下面的代码。

function add_options_simple() 
    global $woocommerce, $post;
    $id = $post->ID;
    $product = wc_get_product($id)->get_type();
    if ($product == 'simple') ?>
        <div class="options_group brand_ean show_if_simple hidden">
            <?php
            woocommerce_wp_text_input(
                array(
                    'id'          => '_brand',
                    'label'       => 'Brand',
                    'type'        => 'text',
                )
            );
            woocommerce_wp_text_input(
                array(
                    'id'          => '_EAN',
                    'label'       => 'EAN:',
                    'type'        => 'text',
                )
            ); 
           ?>
        </div>
        <script type="text/javascript">
            var brand_ean = jQuery('.brand_ean')[0].outerhtml;
            jQuery('.brand_ean').remove();
            jQuery( brand_ean ).insertBefore('.options_group.pricing');
        </script>
    <?php 

add_action( 'woocommerce_product_options_general_product_data', 'add_options_simple', 1, 3 );

经过测试且有效

【讨论】:

这是正确的,但这不是我想要解决的方式。但是,您指向核心文件的链接非常清楚:首先生成框,然后遵循 add_action。所以这显然是不可能的。谢谢 我知道这不是你想要的,但我只能通过这种方式找到它。

以上是关于为 woocommerce 产品选项卡上的自定义字段设置优先级的主要内容,如果未能解决你的问题,请参考以下文章

删除 WooCommerce 可变产品上的重置变体按钮

WooCommerce 中特定产品的基于地理位置的自定义重定向

如何维护引导选项卡上的分页?

Xcode 9:好奇的自定义字体行为

如果产品描述为空,WooCommerce 如何隐藏“描述”选项卡

Woocommerce 自定义添加到购物车循环