将高级自定义字段添加到 WooCommerce 产品变体

Posted

技术标签:

【中文标题】将高级自定义字段添加到 WooCommerce 产品变体【英文标题】:Add Advanced Custom Fields to WooCommerce Product Variation 【发布时间】:2016-09-12 21:15:54 【问题描述】:

我正在使用名为 Advanced Custom Fields (ACF) 和 WooCommerce 的插件。我想为 WooCommerce 产品变体创建一个文本和图像字段。我在 ACF 中创建了字段并将它们分配给 "Post Type" > "product_variation"

但是因为我在product > Variations 下看不到这些字段。我进行了搜索,看来我必须编写自定义代码来容纳这些字段。我尝试搜索问题,发现的大多数建议和教程都是关于通过代码创建自定义字段而不是使用 ACF,这对我没有帮助,因为字段必须使用 ACF,那是因为我使用 Visual Composer 来提取这些前端的 ACF 字段。

【问题讨论】:

理想情况下,您应该自己查看代码,看看是否有过滤器可以使用,如果没有,您可能必须覆盖模板,取消操作等...从搜索 html 开始找到控制它的函数。 @David 是的,这绝对是计划,如果我在这里找不到太多帮助,我会这样做。我只是不想重新发明***。也许值得等待? 也许吧,但我说它太具体了。恩,不花钱看自己,如果你要使用插件,不妨了解一下:)如果你有使用过的代码,得到帮助会更容易。 您尝试过吗:wordpress.org/plugins/wc-fields-factory,它可以选择在变体级别添加自定义字段 啊 WC-Fields-Factory 不是 ACF,我想扩展 ACF。 【参考方案1】:

这不是 acf,但您只需在 /public_html/wp-content/themes/yourtheme-child/function.php 下的子主题的“function.php”中添加一些代码

请查看本教程http://www.remicorson.com/mastering-woocommerce-products-custom-fields/

例如,在我的代码中,我为 RRP 添加了 2 个字段,另外一个用于个人使用(每对价格):

        /* Adds RRP or PPP* price after each product price throughout the shop for user != Customer & Guest
    .Not displayed in cart as it's not per var and we don't need to.
    PPP = Price Per Pair (for product composite/bundle display)
    ================================================== */

// Display Fields
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );

// Save Fields
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );

function woo_add_custom_general_fields() 

    global $woocommerce, $post;

    // Text Field creation
woocommerce_wp_text_input( 
    array( 
        'id'          => '_rrpprice', 
        'label'       => __( 'RRP price ($)', 'woocommerce' ), 
        'placeholder' => 'e.g. 499',
        'desc_tip'    => 'true',
        'description' => __( 'Enter the RRP .', 'woocommerce' )
    )
);
woocommerce_wp_text_input( 
    array(  
        'id'          => '_pppprice', 
        'label'       => __( 'Price Per Pair*', 'woocommerce' ),
        'placeholder' => 'e.g. 122',
        'desc_tip'    => 'true',
        'description' => __( 'Enter the PPP (Price Per Pair) if Bundle/composite .', 'woocommerce' ) 
    )
);  

function woo_add_custom_general_fields_save( $post_id )

    // TextField save
    $woocommerce_rrpprice = $_POST['_rrpprice'];
    update_post_meta( $post_id, '_rrpprice', esc_html( $woocommerce_rrpprice ) );
    if( !empty( $woocommerce_rrpprice ) )

    // TextField save
    $woocommerce_pppprice = $_POST['_pppprice'];
    if( !empty( $woocommerce_pppprice ) )
    update_post_meta( $post_id, '_pppprice', esc_html( $woocommerce_pppprice ) );


// Display Custom Field Value

if ( is_user_logged_in() && !(current_user_can('customer'))) 
    function sv_change_product_price_display( $price ) 
        $product = wc_get_product( get_the_ID() );
        $priceRRP = get_post_meta( get_the_ID(), '_rrpprice', true );
        $pricePPP = get_post_meta( get_the_ID(), '_pppprice', true );
          if ( (is_shop() || is_product()) && !is_cart() )  //double belt check
            if($product->is_type( 'variable' ))
                $price .= ' + GST<br /><span class="rrp-price">RRP: $' . $priceRRP .'</span>';
            else

                $price = ' <span class="rrp-price"><b>$' . $pricePPP .' + GST </b></span>' . '<br /><span class="rrp-price">RRP: $' . $priceRRP .'</span>';
            
          
        return $price;          
    
    add_filter( 'woocommerce_get_price_html', 'sv_change_product_price_display' );
    add_filter( 'woocommerce_cart_item_price', 'sv_change_product_price_display' );

如果您有任何问题,请随时提出。

【讨论】:

这会将字段添加到产品级别,在产品数据 > 常规下,而不是变体。【参考方案2】:

据我所知,Advanced Custom Fields 插件只允许您为编辑器添加自定义字段。这些字段不能用于构建前端 除非将手放在代码中。

如果您想为您的产品添加自定义字段(以便客户可以进行一些个性化设置),您必须使用另一个插件。我个人使用WC Fields Factory,它可以让您为您的产品定义附加数据,例如尺寸、颜色、图像等。只需使用新的Field Factory 菜单即可。

当然应该还有其他我没试过的。

【讨论】:

当然前端我会展示数据。我只想在后端编辑器中显示字段(即产品变体)老实说,只使用 ACF 是我客户的要求,我对此无能为力。我想我必须编写代码来在产品变体选项卡下显示 ACF 字段。无论如何感谢到目前为止的帮助 好的,很抱歉误解了您的问题。我已经尝试过了,我也无法在产品变体页面中显示字段,似乎超出了这个插件的范围。也许***.com/questions/30009220/… 或***.com/questions/22420311/… 之类的主题可能会对您有所帮助。 很好,感谢您提供资源链接。我已经开始为这个问题编写代码。我会在完成后立即发布它。我希望它也能帮助其他人。也许是时候回馈了;) Syed,您是否找到一种方法将高级自定义字段添加到 WooCommerce 产品变体?如果可以,能否分享一下代码?【参考方案3】:

我自己也遇到过这个问题,考虑到 WooCommerce 更改的频繁程度,我犹豫是否要在代码中填充一些额外的字段。我确实想出了一个最小的代码解决方法,它可能适合也可能不适合您的需求。 本质上,它是在常规帖子中“代理”变体的自定义字段,并通过将该帖子 ID 放入产品变体的 SKU 字段来访问这些字段。

我首先设置了一个帖子类别“自定义字段” - 我通过重定向到类似名称的产品来隐藏它。 我为帖子类别设置了我的自定义字段:自定义字段,然后我添加了一个帖子,例如“widget x red”,我输入了红色变体的自定义字段。 保存帖子后,我将帖子 ID 添加到产品变体 SKU 字段。 自定义 CSS 我隐藏了 SKU 字段并编辑子主题 woocommerce/single-product.php 我添加了一点 PHP 来检索自定义字段。

$product = wc_get_product($post->ID);
$pv = new WC_Product_Variable($product->get_id());
$variations = $pv->get_available_variations();  
$custom_fields=[];
if(!empty($variations))
    foreach($variations as $variation)
        $vid = $variation['variation_id'];
        $sku = $variation['sku'];
        if($vid && $sku)
            $fields = get_fields($sku);
            if($fields)
                $custom_fields[$vid] = $fields;
            
        
    

之后,我将自定义字段按变体 ID 编入索引

【讨论】:

以上是关于将高级自定义字段添加到 WooCommerce 产品变体的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义字段添加到 WooCommerce 注册表单

根据 WooCommerce 中的自定义字段值将文本添加到订单摘要

自定义特定 WooCommerce 产品类别上的“添加到购物车”按钮

将基于 ACF 字段的自定义“添加到购物车”按钮添加到 WooCommerce 单品页面

替换产品类别的 Woocommerce 单一产品页面上的“添加到购物车”按钮

WooCommerce:为特定页面添加使用 WordPress 自定义字段添加到购物车旁边的自定义按钮