【发布时间】:2018-01-10 19:00:02
【问题描述】:
首先,我知道在 stackoverflow 上有类似的主题,但是我尝试过的所有方法都对我有用。
我创建了一个插件来获取用户在所有产品页面上的文本输入。我需要这个额外的功能才能仅在某些产品或某个类别中的某些产品上运行。
这里是功能。
function kia_custom_option(){
$value = isset( $_POST['_custom_option'] ) ? sanitize_text_field( $_POST['_custom_option'] ) : '';
printf( '<label>%s</label><input name="_custom_option" value="%s" />', __( 'Custom Text: ', 'kia-plugin-textdomain' ), esc_attr( $value ) );
}
add_action( 'woocommerce_before_add_to_cart_button', 'kia_custom_option', 9 );
function kia_add_to_cart_validation($passed, $product_id, $qty){
if( isset( $_POST['_custom_option'] ) && sanitize_text_field( $_POST['_custom_option'] ) == '' ){
$product = wc_get_product( $product_id );
wc_add_notice( sprintf( __( '%s cannot be added to the cart until you enter your custom text.', 'kia-plugin-textdomain' ), $product->get_title() ), 'error' );
return false;
}
return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'kia_add_to_cart_validation', 10, 3 );
function kia_add_cart_item_data( $cart_item, $product_id ){
if( isset( $_POST['_custom_option'] ) ) {
$cart_item['custom_option'] = sanitize_text_field( $_POST['_custom_option'] );
}
return $cart_item;
}
add_filter( 'woocommerce_add_cart_item_data', 'kia_add_cart_item_data', 10, 2 );
function kia_get_cart_item_from_session( $cart_item, $values ) {
if ( isset( $values['custom_option'] ) ){
$cart_item['custom_option'] = $values['custom_option'];
}
return $cart_item;
}
add_filter( 'woocommerce_get_cart_item_from_session', 'kia_get_cart_item_from_session', 20, 2 );
function kia_add_order_item_meta( $item_id, $values ) {
if ( ! empty( $values['custom_option'] ) ) {
woocommerce_add_order_item_meta( $item_id, 'custom_option', $values['custom_option'] );
}
}
add_action( 'woocommerce_add_order_item_meta', 'kia_add_order_item_meta', 10, 2 );
function kia_get_item_data( $other_data, $cart_item ) {
if ( isset( $cart_item['custom_option'] ) ){
$other_data[] = array(
'name' => __( 'Origin Email', 'kia-plugin-textdomain' ),
'value' => sanitize_text_field( $cart_item['custom_option'] )
);
}
return $other_data;
}
add_filter( 'woocommerce_get_item_data', 'kia_get_item_data', 10, 2 );
我试图仅在某些产品或类别上显示文本框。我有一个 ID 为 680 的产品。
我在插件顶部尝试了这个。
if (is_single( '680' )) {
//All the above code here.
}
但这没有用。我也按类别尝试过,但也没有运气。有人可以向我解释我做错了什么或如何将这些功能仅应用于某些产品吗?
编辑---我找到了解决方案:
function kia_custom_option(){
global $product;
$product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;
if($product_id == 680 || $product_id == 687){
$value = isset( $_POST['_custom_option'] ) ? sanitize_text_field( $_POST['_custom_option'] ) : '';
printf( '<label>%s</label><input name="_custom_option" value="%s" />', __( 'Custom Text: ', 'kia-plugin-textdomain' ), esc_attr( $value ) );
}
}
add_action( 'woocommerce_before_add_to_cart_button', 'kia_custom_option', 9 );
【问题讨论】:
标签: php wordpress woocommerce custom-fields custom-taxonomy