将自定义WooCommerce产品类型声明为仅虚拟/可下载

时间:2015-03-14 作者:1Up

我正在尝试设置woocommerce自定义产品类型,以便尽可能少地使用它-没有我没有特别指定的选项。

尽管有下面的声明,自定义产品元框仍然显示“装运”装运选项。

我如何摆脱运输选项?在这一点上,我想删除任何其他内容。

add_action(\'plugins_loaded\', \'ss_create_custom_product_type\');

function ss_create_custom_product_type() {

    // declare the product class
    class WC_Product_Wdm extends WC_Product {    
        public function __construct($product) {
            $this->product_type = \'ss_stock_image\';


            $this->virtual = \'yes\';
            $this->downloadable = \'yes\';
            $this->manage_stock = \'no\';   

            parent::__construct($product);
            // add additional functions here            
        }     
    }        
}
enter image description here

更新时间:

我已经根据建议更新了课程。然而,我想知道为什么代码没有被解雇。

add_action(\'plugins_loaded\', \'ss_create_custom_product_type\');

function ss_create_custom_product_type() {

    // declare the product class
    class WC_Product_Wdm extends WC_Product {

        public function __construct($product) {
            $this->product_type = \'ss_stock_image\';

            add_filter(\'woocommerce_product_data_tabs\', array($this, \'remove_tabs\'), 10, 1);

            parent::__construct($product);
        }

        public function remove_tabs($tabs) {

            /**
             * The available tab array keys are:
             * 
             * general
             * inventory
             * shipping
             * linked_product
             * attribute
             * variations
             * advanced
             */
            unset($tabs[\'shipping\']);
            return $tabs;
        }

    }

}

2 个回复
最合适的回答,由SO网友:Adam 整理而成

进一步查看WooCommerce源代码,幸运的是,他们提供了一个名为woocommerce_product_data_tabs 这将允许您有条件地取消设置选项卡。

我在下面提供了一个示例:

add_filter(\'woocommerce_product_data_tabs\', function($tabs) {

    /**
     * The available tab array keys are:
     * 
     * general
     * inventory
     * shipping
     * linked_product
     * attribute
     * variations
     * advanced
     */

    unset($tabs[\'shipping\']);
    return $tabs;

}, 10, 1);
您还可以使用筛选产品类型下拉菜单product_type_selector 使用筛选和产品类型选项复选框product_type_options 滤器

示例:

add_filter(\'product_type_selector\', function($product_type) {

    /**
     * The available product type selection array keys are:
     * 
     * simple
     * grouped
     * external
     * variable
     */

    unset($product_type[\'variable\']); //as an example...
    return $product_type;

}, 10, 1);
示例:

add_filter(\'product_type_options\', function($product_options) {

    /**
     * The available product type options array keys are:
     * 
     * virtual
     * downloadable
     */

    unset($product_options[\'downloadable\']); //as an example...
    return $product_options;

}, 10, 1);
作为参考,我首先通过查看add_meta_boxes 中包含的方法WC_Admin_Meta_Boxes 内的类includes/admin/class-wc-admin-meta-boxes.php;

从那里你会注意到,他们添加了一个元框,其id为,woocommerce-product-data 其回调为WC_Meta_Box_Product_Data::output 在中找到includes/admin/meta-boxes/class-wc-meta-box-product-data.php.

就在这个范围内output 筛选的方法woocommerce_product_data_tabs, product_type_selectorproduct_type_options 存在

SO网友:1Up

实际上@userabuser有更完整的答案,但为了克服这个问题,我可以通过这种方式简单地添加一个“隐藏”类:

add_filter(\'woocommerce_product_data_tabs\', function($tabs) {

    array_push($tabs[\'shipping\'][\'class\'], \'hide_if_ss_stock_image\');
    return $tabs;

}, 10, 1);
请注意hide_if_ss_stock_image 添加的类。

结束

相关推荐