近日云聚合在Wordpress的商城插件Woocommerce开发中,创建自定义的产品product_type类型,下面给出代码段实例:
add_filter( 'product_type_selector', 'pd_add_jappt_product_type' );
function pd_add_jappt_product_type( $types ){
$types[ 'jappt_service' ] = 'Jappt Service';
return $types;
}
/*
* Add New Product Type Class
*/
add_action( 'init', 'pd_create_jappt_product_type' );
function pd_create_jappt_product_type(){
class WC_Product_Jappt_Service extends WC_Product {
public function get_type() {
return 'jappt_service';
}
}
}
/*
* Load New Product Type Class
*/
add_filter( 'woocommerce_product_class', 'pd_woocommerce_product_class', 10, 2 );
function pd_woocommerce_product_class( $classname, $product_type ) {
if ( $product_type == 'jappt_service' ) {
$classname = 'WC_Product_Jappt_Service';
}
return $classname;
}
// Adding Price fields & inventory to jappt product type
add_action('admin_footer', 'pd_jappt_product_admin_jappt_js');
function pd_jappt_product_admin_jappt_js() {
if ('product' != get_post_type()) :
return;
endif;
?>
<script type='text/javascript'>
jQuery(document).ready(function () {
//for Price tab
jQuery('.options_group.pricing').addClass('show_if_jappt_service').show();
// //for Inventory tab
// jQuery('.inventory_options').addClass('show_if_jappt').show();
// jQuery('#inventory_product_data ._manage_stock_field').addClass('show_if_jappt').show();
// jQuery('#inventory_product_data ._sold_individually_field').parent().addClass('show_if_jappt').show();
// jQuery('#inventory_product_data ._sold_individually_field').addClass('show_if_jappt').show();
});
</script>
<?php
}
// add the settings under ‘General’ sub-menu
add_action( 'woocommerce_product_options_general_product_data', 'pd_add_jappt_settings' );
function pd_add_jappt_settings() {
// global $woocommerce, $post;
echo '<div class="options_group">';
echo '</div>';
}
jappt_service
这个类型的产品类型,不允许在正常的产品页面loop中展示,下面我们给出代码段实例
add_action( 'woocommerce_product_query', 'hide_jappt_products_type' );
function hide_jappt_products_type( $q ) {
if( is_admin() )
return;
$tax_query = (array) $q->get( 'tax_query' );
$tax_query[] = array(
'taxonomy' => 'product_type',
'field' => 'slug',
'terms' => array( 'jappt_service' ), // Category slug here
'operator' => 'NOT IN'
);
$q->set( 'tax_query', $tax_query );
}
以上代码需要放入对应主题的 functions.php
中才能生效。