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

m0rkklqb  于 2022-11-22  发布在  WordPress
关注(0)|答案(3)|浏览(220)

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

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

ua4mk5z4

ua4mk5z41#

这不是acf,但是你只需要在你的子主题的“function.php”中添加一些代码,在 /public_html/wp-content/themes/yourtheme-child/function.php 下。
请看本教程http://www.remicorson.com/mastering-woocommerce-products-custom-fields/
例如,在我的代码中,我添加了2个字段用于RRP,另一个字段用于个人使用(每双价格):

/* 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' );
}

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

6yt4nkrj

6yt4nkrj2#

据我所知,Advanced Custom Fields插件只允许你为编辑器添加自定义字段。这些字段不能用来构建前端,除非你把手放在代码中。
如果你想为你的产品添加自定义字段(这样客户可以做一些个性化),你必须使用另一个插件。我个人使用WC Fields Factory,它可以让你为你的产品定义额外的数据,如大小,颜色,图像等。只需使用新的 Field Factory 菜单。
当然应该还有别的我没试过的。

bnl4lu3b

bnl4lu3b3#

我自己也面临过这个问题,考虑到WooCommerce的变更频率,我很犹豫是否要用代码填充一些额外的字段。我确实找到了一个最小的代码解决方案,可能适合也可能不适合你的需求。本质上,它是在常规帖子中“代理”变体的自定义字段,并通过将该帖子ID放入产品变体的SKU字段来访问这些字段。
我首先设置了一个帖子类别“custom-fields”--我通过重定向到类似名称的产品来隐藏它。我为帖子类别设置了自定义字段:custom-fields,然后我添加了一个帖子,例如“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进行索引

相关问题