当前位置: 首页 > 知识库问答 >
问题:

在WooCommerce产品变体中显示ACF自定义字段

周昊乾
2023-03-14

我成功地在后端的产品变化中的WooCommerce中创建了一个ACF自定义字段。该字段在每个变化中正确显示。

但是在编辑变体中的此字段或其他字段后,我无法再保存整个变体选项卡。加载/保存指示器圆圈继续无限旋转。并且定制字段未显示在前端的单个产品变体中。

我所做的是将以下代码添加到我的functions.php

/* ACF filter for Variations */

// Render fields at the bottom of variations - does not account for field group order or placement.
$GLOBALS['wc_loop_variation_id'] = null;

function is_field_group_for_variation($field_group, $variation_data, $variation_post) {
    return (preg_match( '/Variation/i', $field_group['title'] ) == true);
}

add_action( 'woocommerce_product_after_variable_attributes', function( $loop_index, $variation_data, $variation_post ) {
        $GLOBALS['wc_loop_variation_id'] = $variation_post->ID;

        foreach ( acf_get_field_groups() as $field_group ) {
            if ( is_field_group_for_variation( $field_group, $variation_data, $variation_post ) ) {
                acf_render_fields( $variation_post->ID, acf_get_fields( $field_group ) );
            }
        }

        $GLOBALS['wc_loop_variation_id'] = null;
    }, 10, 3 );

add_action( 'woocommerce_save_product_variation', function( $variation_id, $loop_index ) {
        if ( !isset( $_POST['acf_variation'][$variation_id] ) ) {
            return;
        }

        $_POST['acf'] = $_POST['acf_variation'][$variation_id];

        acf()->input->save_post( $variation_id );
    }, 10, 2 );

add_filter( 'acf/prepare_field', function ( $field ) {
        if ( !$GLOBALS['wc_loop_variation_id'] ) {
            return $field;
        }

        $field['name'] = preg_replace( '/^acf\[/', 'acf_variation[' . $GLOBALS['wc_loop_variation_id'] . '][', $field['name'] );

        return $field;
    }, 10, 1);

//add ACF rule
add_filter('acf/location/rule_values/post_type', 'acf_location_rule_values_Post');
function acf_location_rule_values_Post( $choices ) {
    $choices['product_variation'] = 'Product Variation';
    //print_r($choices);
    return $choices;
}

/* End */

任何帮助都将不胜感激。

共有1个答案

高祺
2023-03-14
acf()->input->save_post( $variation_id );

应该是

do_action( 'acf/save_post', $variation_id );

从这里记到onowebhttps://support.advancedcustomfields.com/forums/topic/acf-on-product-variations-almost-works/

 类似资料:
  • 我为woocommerce产品“coffee_type”创建了自定义分类法。我为此分类法创建了一个ACF图像字段“coffee\u type\u image”。 我想在产品页面上显示带有链接的图像,而不是分类法的名称。我在这里读了大多数关于在分类法上显示acf图像的文章,但每一篇都是关于使用归档分类法页面而不是产品页面。我正在编辑single-product.php(确切地content-sing

  • 在Woocommerce中,我试图使一个定制的div容器在可变产品的变体缺货时可见,但在缺货时可用。

  • 是否有一种方法可以在WooCommerce订单页面的每个产品下显示我的自定义SKU? 当我编辑产品时,自定义sku显示良好,但它不会显示在产品的订单页面中。我需要在订单上显示此信息,以便Zapier可以将其与产品的Visma帐户软件ArticleID匹配。 此尝试基于如何向WooCommerce产品添加(第二个)自定义sku字段的解决方案?

  • 目前正在使用WordPress 5.1.1和WooCommerce 3.5.7。我的WooCommerce商店有大约500种产品,由简单和多变的产品组成。 每个产品自然都有一个SKU,但每个产品也有一个称为“商品代码”的唯一ID代码。我向特定行业销售特定产品。 我已经在我的functions.php文件中添加了简单和可变产品的自定义字段的代码,目前效果很好。 我的问题是,我试图让“商品代码”出现在

  • 在简短描述之前,我在WooCommerce中添加一个新字段时遇到了一个问题。 我使用脚本在和我的新自定义字段显示正确,但: 使用脚本时,简短描述消失,新字段显示良好。 我可以编辑产品页面上某个字段的内容,但不能删除它。它始终是最后一个值 如何显示此自定义字段而不删除产品简短说明? 如何重置此自定义字段内容? 这是我的代码: 负责显示的功能: