我的代码显示在所有产品类型,如简单产品,可变产品,自定义类型......字段。意味着可用于所有,但我想限制它为我的自定义类型。
如何将自定义字段类型限制为英语课程产品类型
add_filter( 'product_type_selector', 'english_course_wc_cpt' );
function english_course_wc_cpt( $types ){
$types[ 'wdm_custom_product' ] = __( 'English Courses' );
return $types;
}
class WC_Product_Wdm extends WC_Product{
public function __construct( $product ) {
$this->product_type = 'wdm_custom_product';
parent::__construct( $product );
// add additional functions here
}
}
add_action( 'woocommerce_product_options_general_product_data', 'english_course_custom_fields' );
function english_course_custom_fields() {
global $woocommerce, $post;
echo '<div class="options_group">';
// Duration: Duration of the course
woocommerce_wp_text_input(
array(
'id' => 'duration_ec_wc_cpt',
'label' => __( 'Duration', 'woocommerce' ),
'placeholder' => 'Enter the Duration of the Course',
'desc_tip' => 'true',
'description' => __( 'Duration of the Course.', 'woocommerce' ),
'type' => 'text'
));
// Fee: Create a number field
woocommerce_wp_text_input(
array(
'id' => 'fee_ec_wc_cpt',
'label' => __( 'Fee', 'woocommerce' ),
'placeholder' => 'Enter the Fee',
'desc_tip' => 'true',
'description' => __( 'Fee of the course.', 'woocommerce' ),
'type' => 'number'
));
// Address: Create a text area field
woocommerce_wp_textarea_input(
array(
'id' => 'address_ec_wc_cpt',
'label' => __( 'Address', 'woocommerce' ),
'placeholder' => 'Enter the Address',
'desc_tip' => 'true',
'description' => __( 'Address of the course.', 'woocommerce' ),
));
echo '</div>';
}
/*
* SAVING DATA - ENGLISH COURSES (wc_cpt)
* postfix/prefix : ec_wc_cpt
*/
add_action( 'woocommerce_process_product_meta', 'save_ec_wc_cpt' );
function save_ec_wc_cpt( $post_id ){
// Save Duration field
$duration_ec_wc_cpt = $_POST['duration_ec_wc_cpt'];
if( !empty( $duration_ec_wc_cpt ) )
update_post_meta( $post_id, 'duration_ec_wc_cpt', esc_attr( $duration_ec_wc_cpt) );
// Save Fee field
$fee_ec_wc_cpt = $_POST['fee_ec_wc_cpt'];
if( !empty( $fee_ec_wc_cpt ) )
update_post_meta( $post_id, 'fee_ec_wc_cpt', esc_attr( $fee_ec_wc_cpt) );
// Save Address field
$address_ec_wc_cpt = $_POST['address_ec_wc_cpt'];
if( !empty( $fee_ec_wc_cpt ) )
update_post_meta( $post_id, 'address_ec_wc_cpt', esc_attr( $address_ec_wc_cpt) );
}
5条答案
按热度按时间bttbmeg01#
我认为有两种方法可以做到这一点。1。要么添加自定义字段到自己的窗格中的产品数据框。或2。继续添加他们到通用数据挂钩您正在使用,然后使用JS隐藏他们的其他产品类型。
方法1
方法2
用
show_if_{$product_type}
类将您的输入 Package 在一个div中。我 * 认为 * WooCommerce将为您处理隐藏/显示方面。编辑:我检查了我自己的代码,发现您必须编写隐藏/显示自己的javascript。这很容易做到,因为当产品类型输入发生变化时,WooCommerce会触发一个自定义事件,所以我们可以编写一个处理程序来触发这个事件。
68bkxrlz2#
添加自定义 meta框,然后向元框中添加字段
ac1kyiln3#
您可以使用
woocommerce_product_options_general_product_data
操作挂钩添加自定义字段到特定的产品类型和woocommerce_process_product_meta
过滤器挂钩保存自定义字段。有关详细信息,请参阅链接-http://wisdmlabs.com/blog/create-product-type-custom-settings-woocommerce/。这将帮助您。ht4b089n4#
1.在Woocommerce中创建自定义产品类别;就叫它
Custom Product
。1.将以下代码添加到functions.php:
1.将以下行添加到
english_course_custom_fields()
的开头:czfnxgou5#
您应该创建一个新文件并将类放入其中。
并在另一个文件中传递其他函数。然后将类放在文件的开头