web-dev-qa-db-ja.com

WooCommerce-バリエーションのカスタムフィールド値を表示する

次の関数を使用して、「price_1_50」というカスタムフィールドを各製品バリエーションに追加します。

add_action( 'woocommerce_variation_options_pricing', 'bbloomer_add_custom_field_to_variations', 10, 3 );
function bbloomer_add_custom_field_to_variations( $loop, $variation_data, $variation ) {
woocommerce_wp_text_input( array(
    'id' => 'price_1_50[' . $loop . ']',
    'class' => 'short',
    'label' => __( 'Price 1-50:', 'woocommerce' ),
    'value' => get_post_meta( $variation->ID, 'price_1_50', true )
));
}

add_action( 'woocommerce_save_product_variation', 'bbloomer_save_custom_field_variations', 10, 2 );
function bbloomer_save_custom_field_variations( $variation_id, $i ) {
    $price_1_50 = $_POST['price_1_50'][$i];
    if ( isset( $price_1_50 ) ) update_post_meta( $variation_id, 'price_1_50', esc_attr( $price_1_50 ) );
}

add_filter( 'woocommerce_available_variation', 'bbloomer_add_custom_field_variation_data' );
function bbloomer_add_custom_field_variation_data( $variations ) {
    $variations['price_1_50'] = '<div class="woocommerce_custom_field">Price 1-50: 
<span>'get_post_meta( $variations[ 'variation_id' ], 'price_1_50', true ) . '</span></div>';
return $variations;
}

Functions.phpで、製品の価格をカスタムフィールド「price_1_50」で置き換える関数を記述しましたが、フロントエンドでカスタムフィールドを表示するためのバリエーションIDを取得できないと思います。

私はもう試した

var price = <?php echo get_post_meta( $variation_id, 'price_1_50', true ); ?>;
var price = <?php echo get_post_meta( get_the_ID(), 'price_1_50', true ); ?>;
$arrvariations = $variation->get_children (); $price_1_50 = get_post_meta( $arrvariations, 'price_1_50', true ); echo $price_1_50;

単一の製品ページのフロントエンドで結果を取得する唯一の方法は、バリエーションIDを書き込むことです。

var price = <?php echo get_post_meta( 10652, 'price_1_50', true ); ?>;
1
Billy

はい、なんとか解決しました。これが最後にバリエーションカスタムフィールドを作成した方法です。

add_action( 'woocommerce_product_after_variable_attributes', 'variation_settings_fields', 10, 3 );

add_action( 'woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 2 );

function variation_settings_fields( $loop, $variation_data, $variation ) {
    woocommerce_wp_text_input( 
        array( 
            'id'          => 'price_1_50[' . $variation->ID . ']',
            'class'       => 'price_1_50',
            'type'        => 'text',  
            'label'       => __( 'Price | Product amount: 1-49', 'woocommerce' ), 
            'placeholder' => '',
            'desc_tip'    => 'true',
            'description' => __( 'Enter price for product amount 1-49 (if available)', 'woocommerce' ),
            'value'       => get_post_meta( $variation->ID, 'price_1_50', true )
        )
    );
}

function save_variation_settings_fields( $post_id ) {
    $text_field = $_POST['_price_1_50'][ $post_id ];
    if( ! empty( $text_field ) ) {
        update_post_meta( $post_id, 'price_1_50', esc_attr( $text_field ) );
    }
}

そして、これは私がフロントエンドで望ましい結果を得た方法です(に基づいて: https://stackoverflow.com/questions/47646939/how-to-get-woocommerce-variation-id

$args = array(
    'post_type'     => 'product_variation',
    'post_status'   => array( 'private', 'publish' ),
    'numberposts'   => -1,
    'orderby'       => 'menu_order',
    'order'         => 'asc',
    'post_parent'   => get_the_ID() // get parent post-ID
);
$variations = get_posts( $args );

foreach ( $variations as $variation ) {

    $variation_ID = $variation->ID;

    $product_variation = new WC_Product_Variation( $variation_ID );

    get_post_meta( $variation_ID , 'price_1_50', true );

}
0
Billy

以下を使用してみてください:

$post = $wp_query->post;
global $post; 

次に使用します:

$price = get_post_meta($post->ID,'price_1_50',true);
echo $price;
0
TomC