WooCommerce 可变产品变体中的附加价格字段
Additional price field in variations for WooCommerce variable products
我已经设法将其组合在一起用于简单产品,但我还需要处理可变产品。这会在产品页面(WC 后端)上创建一个自定义产品字段,并将文本保存为 "RRP / MSRP",代表推荐零售价/制造商建议零售价。
价格将显示在产品页面上的产品价格上方。如前所述,我的问题是这只适用于简单的产品。我需要帮助使其适用于所有产品类型,但最重要的是 - 可变产品。
代码:
add_action( 'woocommerce_product_options_pricing', 'add_msrp' );
function add_msrp() {
woocommerce_wp_text_input( array(
'id' => 'msrp',
'class' => 'short wc_input_price',
'label' => __( 'RRP / MSRP', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')',
'data_type' => 'price',
) );
}
add_action( 'save_post_product', 'save_msrp' );
function save_msrp( $product_id ) {
global $pagenow, $typenow;
if ( 'post.php' !== $pagenow || 'product' !== $typenow )
return;
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( isset( $_POST['msrp'] ) ) {
if ( $_POST['msrp'] )
update_post_meta( $product_id, 'msrp', $_POST['msrp'] );
} else
delete_post_meta( $product_id, 'msrp' );
}
add_action( 'woocommerce_single_product_summary', 'display_msrp', 9 );
function display_msrp() {
global $product;
if ( $product->get_type() <> 'variable' && $msrp = get_post_meta( $product->get_id(), 'msrp', true ) ) {
echo '<div class="woocommerce_msrp">';
_e( 'RRP / MSRP: ', 'woocommerce' );
echo '<span class="msrp-price">' . wc_price( $msrp ) . '</span>';
echo '</div>';
}
}
有人可以帮我解决这个问题吗?
您的代码有点过时,因为 WooCommerce 3+ 和其他一些东西,例如用于自定义字段的 meta_key slugs (我在最后重新访问了它)...
要处理可变产品的产品变体,请使用以下内容:
// Backend Variation - Add / Display MRSP Field
add_action( 'woocommerce_variation_options_pricing', 'add_variation_options_pricing_msrp', 10, 3 );
function add_variation_options_pricing_msrp( $loop, $variation_data, $variation ){
woocommerce_wp_text_input( array(
'id' => '_msrp_'.$loop,
'wrapper_class' => 'form-row form-row-first',
'class' => 'short wc_input_price',
'label' => __( 'RRP / MSRP', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')',
'value' => wc_format_localized_price( get_post_meta( $variation->ID, '_msrp', true ) ),
'data_type' => 'price',
) );
}
// Backend Variation - Save MRSP Field value
add_action( 'woocommerce_save_product_variation','save_variation_options_pricing_msrp',10 ,2 );
function save_variation_options_pricing_msrp( $variation_id, $loop ){
if( isset($_POST['_msrp_'.$loop]) )
update_post_meta( $variation_id, '_msrp', wc_clean( wp_unslash( str_replace( ',', '.', $_POST['_msrp_'.$loop] ) ) ) );
}
// Frontend Variation - MRSP display
add_filter( 'woocommerce_available_variation', 'display_variation_msrp', 10, 3 );
function display_variation_msrp( $data, $product, $variation ) {
if( $msrp = $variation->get_meta('_msrp') ) {
$data['price_html'] = '<div class="woocommerce_msrp">' . __( 'RRP / MSRP: ', 'woocommerce' ) .
'<span class="msrp-price">' . wc_price( $msrp ) . '</span></div>' . $data['price_html'];
}
return $data;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
对于所有其他产品。
下面是您重新访问的代码 (产品元键应始终以下划线开头):
// Backend Product - Add / Display MRSP Field
add_action( 'woocommerce_product_options_pricing', 'add_product_options_pricing_msrp' );
function add_product_options_pricing_msrp() {
global $product_object;
woocommerce_wp_text_input( array(
'id' => '_msrp',
'class' => 'short wc_input_price',
'label' => __( 'RRP / MSRP', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')',
'data_type' => 'price',
'value' => str_replace('.', ',', $product_object->get_meta('_msrp') ),
) );
}
// Backend Product - Save MRSP Field value (since Woocommerce 3)
add_action( 'woocommerce_admin_process_product_object', 'save_product_options_pricing_msrp', 10, 1 );
function save_product_options_pricing_msrp( $product ) {
if ( isset( $_POST['_msrp'] ) )
$product->update_meta_data( '_msrp', wc_clean( wp_unslash( str_replace( ',', '.', $_POST['_msrp'] ) ) ) );
}
// Frontend Product - MRSP display
add_action( 'woocommerce_single_product_summary', 'display_product_msrp', 9 );
function display_product_msrp() {
global $product;
if ( $msrp = $product->get_meta('_msrp') ) {
echo '<div class="woocommerce_msrp">' . __( 'RRP / MSRP: ', 'woocommerce' );
echo '<span class="msrp-price">' . wc_price( $msrp ) . '</span>
</div>';
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
类似:
我已经设法将其组合在一起用于简单产品,但我还需要处理可变产品。这会在产品页面(WC 后端)上创建一个自定义产品字段,并将文本保存为 "RRP / MSRP",代表推荐零售价/制造商建议零售价。
价格将显示在产品页面上的产品价格上方。如前所述,我的问题是这只适用于简单的产品。我需要帮助使其适用于所有产品类型,但最重要的是 - 可变产品。
代码:
add_action( 'woocommerce_product_options_pricing', 'add_msrp' );
function add_msrp() {
woocommerce_wp_text_input( array(
'id' => 'msrp',
'class' => 'short wc_input_price',
'label' => __( 'RRP / MSRP', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')',
'data_type' => 'price',
) );
}
add_action( 'save_post_product', 'save_msrp' );
function save_msrp( $product_id ) {
global $pagenow, $typenow;
if ( 'post.php' !== $pagenow || 'product' !== $typenow )
return;
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( isset( $_POST['msrp'] ) ) {
if ( $_POST['msrp'] )
update_post_meta( $product_id, 'msrp', $_POST['msrp'] );
} else
delete_post_meta( $product_id, 'msrp' );
}
add_action( 'woocommerce_single_product_summary', 'display_msrp', 9 );
function display_msrp() {
global $product;
if ( $product->get_type() <> 'variable' && $msrp = get_post_meta( $product->get_id(), 'msrp', true ) ) {
echo '<div class="woocommerce_msrp">';
_e( 'RRP / MSRP: ', 'woocommerce' );
echo '<span class="msrp-price">' . wc_price( $msrp ) . '</span>';
echo '</div>';
}
}
有人可以帮我解决这个问题吗?
您的代码有点过时,因为 WooCommerce 3+ 和其他一些东西,例如用于自定义字段的 meta_key slugs (我在最后重新访问了它)...
要处理可变产品的产品变体,请使用以下内容:
// Backend Variation - Add / Display MRSP Field
add_action( 'woocommerce_variation_options_pricing', 'add_variation_options_pricing_msrp', 10, 3 );
function add_variation_options_pricing_msrp( $loop, $variation_data, $variation ){
woocommerce_wp_text_input( array(
'id' => '_msrp_'.$loop,
'wrapper_class' => 'form-row form-row-first',
'class' => 'short wc_input_price',
'label' => __( 'RRP / MSRP', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')',
'value' => wc_format_localized_price( get_post_meta( $variation->ID, '_msrp', true ) ),
'data_type' => 'price',
) );
}
// Backend Variation - Save MRSP Field value
add_action( 'woocommerce_save_product_variation','save_variation_options_pricing_msrp',10 ,2 );
function save_variation_options_pricing_msrp( $variation_id, $loop ){
if( isset($_POST['_msrp_'.$loop]) )
update_post_meta( $variation_id, '_msrp', wc_clean( wp_unslash( str_replace( ',', '.', $_POST['_msrp_'.$loop] ) ) ) );
}
// Frontend Variation - MRSP display
add_filter( 'woocommerce_available_variation', 'display_variation_msrp', 10, 3 );
function display_variation_msrp( $data, $product, $variation ) {
if( $msrp = $variation->get_meta('_msrp') ) {
$data['price_html'] = '<div class="woocommerce_msrp">' . __( 'RRP / MSRP: ', 'woocommerce' ) .
'<span class="msrp-price">' . wc_price( $msrp ) . '</span></div>' . $data['price_html'];
}
return $data;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
对于所有其他产品。
下面是您重新访问的代码 (产品元键应始终以下划线开头):
// Backend Product - Add / Display MRSP Field
add_action( 'woocommerce_product_options_pricing', 'add_product_options_pricing_msrp' );
function add_product_options_pricing_msrp() {
global $product_object;
woocommerce_wp_text_input( array(
'id' => '_msrp',
'class' => 'short wc_input_price',
'label' => __( 'RRP / MSRP', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')',
'data_type' => 'price',
'value' => str_replace('.', ',', $product_object->get_meta('_msrp') ),
) );
}
// Backend Product - Save MRSP Field value (since Woocommerce 3)
add_action( 'woocommerce_admin_process_product_object', 'save_product_options_pricing_msrp', 10, 1 );
function save_product_options_pricing_msrp( $product ) {
if ( isset( $_POST['_msrp'] ) )
$product->update_meta_data( '_msrp', wc_clean( wp_unslash( str_replace( ',', '.', $_POST['_msrp'] ) ) ) );
}
// Frontend Product - MRSP display
add_action( 'woocommerce_single_product_summary', 'display_product_msrp', 9 );
function display_product_msrp() {
global $product;
if ( $msrp = $product->get_meta('_msrp') ) {
echo '<div class="woocommerce_msrp">' . __( 'RRP / MSRP: ', 'woocommerce' );
echo '<span class="msrp-price">' . wc_price( $msrp ) . '</span>
</div>';
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
类似: