Как добавить новый тип продукта в типы продуктов WooCommerce?

27 окт. 2013 г., 01:19:35
Просмотры: 20.3K
Голосов: 7

Я хочу добавить новый пользовательский "тип продукта" в плагин WooCommerce:

Выпадающий список типов продуктов WooCommerce

Попробовал продублировать один из существующих файлов типа продукта (структура шаблонов WooCommerce) как новый файл (изменив имя файла и внутренний комментарий), но это не сработало!

Структура файлов WooCommerce

0
Все ответы на вопрос 1
4
20

Шаблон добавления в корзину — это лишь одна из многих вещей, которые вам нужно будет сделать. Каждый тип товара имеет свой собственный класс в папке /includes/. Каждый из них наследуется от класса WC_Product.

Чтобы добавить элементы в список, который вы заскриншотили (он находится в админке, а не на фронтенде, в отличие от шаблона add-to-cart.php), вам нужно применить фильтр product_type_selector.

add_filter( 'product_type_selector', 'wpa_120215_add_product_type' );
function wpa_120215_add_product_type( $types ){
    $types[ 'your_type' ] = __( 'Ваш тип товара' );
    return $types;
}

Затем вам нужно объявить свой класс товара. Стандартная система именования — WC_Product_Type_Class, поэтому в этом примере это будет:

class WC_Product_Your_Type extends WC_Product{
    /**
     * __construct function.
     *
     * @access public
     * @param mixed $product
     */
    public function __construct( $product ) {
        $this->product_type = 'your_type'; // Устарело, начиная с WC3.0, см. метод get_type()
        parent::__construct( $product );
    }

     /**
     * Get internal type.
     * Необходимо для совместимости с WooCommerce 3.0
     * @return string
     */
    public function get_type() {
        return 'your_type';
    }
}

Вы задаете очень сложный вопрос, и я не могу дать более полного ответа. Надеюсь, это направит вас в правильном направлении. Я настоятельно рекомендую вам изучить код WooCommerce. Он очень хорошо задокументирован, и вы сможете увидеть, как обрабатываются различные типы товаров.

Обновление Добавлена совместимость с WC3.0 для класса типа товара.

27 окт. 2013 г. 02:41:29
Комментарии

Для людей из ✨ будущего ✨, которые нашли это, вот пост в блоге, который может предоставить полезную дополнительную информацию: http://jeroensormani.com/adding-a-custom-woocommerce-product-type/

Travis Northcutt Travis Northcutt
29 дек. 2016 г. 19:49:30

Отлично! Но для людей из будущего, $this->product_type не будет корректным для WC2.7+.

helgatheviking helgatheviking
29 дек. 2016 г. 21:11:00

@helgatheviking Может, подскажете, где найти более актуальную информацию, особенно о product_type? Я постоянно натыкаюсь на "старые" туториалы, использующие только этот синтаксис.

kontur kontur
1 сент. 2017 г. 09:53:04

@kontur вам нужно добавить метод get_type() в ваш класс. Он должен возвращать тип продукта. Например: public function get_type() { return 'your_type'; } Смотрите мои правки.

helgatheviking helgatheviking
1 сент. 2017 г. 22:41:01