Plugin Directory

Changeset 2579569


Ignore:
Timestamp:
08/06/2021 10:42:15 PM (5 years ago)
Author:
redmonkey73
Message:

Добавлен экспорт вариаций как продуктов
Добавлены хуки bpwp_filter_export_product_cat и bpwp_filter_export_products для фильтрации категорий и товаров перед экспортом

Location:
bonus-plus-wp/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • bonus-plus-wp/trunk/bonus-plus-wp.php

    r2578509 r2579569  
    1515 * WP requires at least: 5.0
    1616 * Tested up to: 5.8
    17  * Version: 1.7
     17 * Version: 1.8
    1818 */
    1919namespace BPWP;
  • bonus-plus-wp/trunk/inc/WooProductCatExport.php

    r2578509 r2579569  
    2121     */
    2222    public static $productCatNoChild = [];
    23 
    24     /**
    25      *  Категории верхнего уровня, не имеющие родителей
    26      */
    27     public static $productTopCat = [];
    2823
    2924    //public static $error = 0;
     
    7166    {
    7267
    73         $wrong_products_action = get_option('bpwp_wrong_products_action');
     68        $wrongProductsAction = get_option('bpwp_wrong_products_action');
    7469        ?>
    7570        <select class="check_prefix_postfix" name="bpwp_wrong_products_action">
     
    7873                    '<option value="%s" %s>%s</option>',
    7974                    'hide',
    80                     selected('hide', $wrong_products_action, false),
     75                    selected('hide', $wrongProductsAction, false),
    8176                    __('Импортировать, не включая товар в файл импорта', 'bonus-plus-wp')
    8277                );
     
    8479                    '<option value="%s" %s>%s</option>',
    8580                    'empty',
    86                     selected('empty', $wrong_products_action, false),
     81                    selected('empty', $wrongProductsAction, false),
    8782                    __( 'Импортировать товар, без категории', 'bonus-plus-wp')
    8883                );
     
    172167        $productList = [];
    173168        $wrongProducts = [];
    174         // Получим категории верхнего уровня
    175         self::$productTopCat = get_terms(
    176             [
    177                 'taxonomy'   => 'product_cat',
    178                 'hide_empty' => false,
    179                 'parent'     => 0,
    180                 'fields'     => 'ids',
    181             ]
    182         );
     169        $simpleProducts = [];
     170        $variableProducts = [];
     171        $wrongProductsAction = get_option('bpwp_wrong_products_action');
    183172       
    184173        $args = array(
     
    187176            'type'   => ['simple', 'variable'],
    188177        );
    189         $products = wc_get_products($args);
    190         if ($products) {
     178
     179        if ($products = wc_get_products($args)) {
     180           
    191181            foreach ($products as $product) {
    192182                $productId = $product->get_id();
     183               
    193184                $productName = $product->get_name();
    194185                $productCategory = self::bpwp_get_product_child_category($productId);
    195186               
    196187                if (count($productCategory) !== 1) {
    197                     // У товара больше 1 дочерней категории или нет, действуем по опции
    198                     $wrong_products_action = get_option('bpwp_wrong_products_action');
    199                     switch ($wrong_products_action) {
     188                    switch ($wrongProductsAction) {
    200189                        case 'hide':
    201190                            do_action(
     
    205194                                $desc = sprintf(__('У товара [%s] %s более 1 дочерней категории', 'bonus-plus-wp'), $productId, $productName),
    206195                            );
     196                            $productCat = -1;
    207197                            break;
    208198                        case 'empty':
    209                             $exportProduct = [
    210                                 'id'  => $productId,
    211                                 'pid' => 0,
    212                                 'n'   => $productName,
    213                                 'g'   => false,
    214                             ];
    215                             $productList[] = $exportProduct;
     199                            $productCat = 0;
    216200                            break;
    217201                    }
    218202                    $wrongProducts[$productId] = $productName;
    219203                } else {
    220                     foreach ($productCategory as $productCat){
    221                         $CatId = $productCat->term_id;
     204                    foreach ($productCategory as $productCat) {
     205                        $productCat = $productCat->term_id;
    222206                    }
    223                     $productExport = [
     207                }
     208
     209                // простые товары
     210                if ($product->is_type('simple') && $productCat >= 0){
     211                    $productList[] = [
    224212                        'id'  => $productId,
    225                         'pid' => $CatId,
     213                        'pid' => $productCat,
    226214                        'n'   => $productName,
    227215                        'g'   => false,
    228216                    ];
    229                     $productList[] = $productExport;
     217                    $simpleProducts[$productId] = $productName;
     218                }
     219               
     220                // вариативные товары
     221                if ($product->is_type('variable') && $productCat >= 0){
     222                    foreach ($product->get_available_variations() as $variation) {
     223                        $variationId = $variation['variation_id'];
     224           
     225                        $var = wc_get_product($variationId);
     226                        $variationName = $var->get_formatted_name();
     227                       
     228                        $productList[] = [
     229                            'id'  => $variationId,
     230                            'pid' => $productCat,
     231                            'n'   => $variationName,
     232                            'g'   => false,
     233                        ];
     234                        $variableProducts[$variationId] = $variationName;
     235                    }
    230236                }
     237
    231238            }
    232239        }
     
    238245        self::$lastExport['pexport'] = count($productList) > 0 ? count($productList) : 0;
    239246        self::$lastExport['phide'] = count($wrongProducts) > 0 ? count($wrongProducts) : 0;
     247        self::$lastExport['vcount'] = count($variableProducts) > 0 ? count($variableProducts) : 0;
    240248
    241249        return $productList;
     
    253261
    254262        if (empty($product)) {
    255             $product_cat = self::bpwp_api_product_cat_data_prepare();
    256             $products = self::bpwp_api_products_data_prepare();
     263            $product_cat = apply_filters('bpwp_filter_export_product_cat', self::bpwp_api_product_cat_data_prepare());
     264            $products = apply_filters('bpwp_filter_export_products', self::bpwp_api_products_data_prepare());
    257265            $product = array_merge($product_cat, $products);
     266            /*
     267            usort($product, function ($a, $b) {
     268                return $a['id'] - $b['id'];
     269            });
     270            */
    258271        }
    259272
     
    309322    {
    310323        $strings = [];
    311         $class = self::$lastExport['class'];
     324        $class = isset(self::$lastExport['class']) ? self::$lastExport['class'] : 'notice notice-warning';
    312325        $lastExportDate = !empty(get_option(self::$lastExportOption)) ? get_option(self::$lastExportOption) : '';
    313         $wrong_products_action = get_option('bpwp_wrong_products_action');
    314         switch ($wrong_products_action) {
     326        $wrongProductsAction = get_option('bpwp_wrong_products_action');
     327        switch ($wrongProductsAction) {
    315328            case 'hide':
    316329                $action = __('Пропущено товаров', 'bonus-plus-wp');
    317330                break;
    318331            case 'empty':
    319                 $action = __('Импортировано товаров, без категории', 'bonus-plus-wp');
     332                $action = __('Экспортировано товаров, без категории', 'bonus-plus-wp');
    320333                break;
    321334        }
     
    328341        $strings[] = sprintf('<strong>%s: %d</strong>', esc_html(__('Экспортировано товаров', 'bonus-plus-wp')), self::$lastExport['pexport']);
    329342        $strings[] = sprintf('<strong>%s: %d</strong>', esc_html($action), self::$lastExport['phide']);
     343        $strings[] = sprintf('<strong>%s: %d</strong>', esc_html(__('Экспортировано вариаций', 'bonus-plus-wp')), self::$lastExport['vcount']);
    330344
    331345
  • bonus-plus-wp/trunk/readme.txt

    r2578509 r2579569  
    55Requires at least: 4.0
    66Tested up to: 5.8
    7 Stable tag: 1.7
     7Stable tag: 1.8
    88Requires PHP: 7.1
    99License: GPLv2 or later
     
    9393== Changelog ==
    9494
     95= 1.8 =
     96- Добавлен экспорт вариаций как продуктов
     97- Добавлены хуки bpwp_filter_export_product_cat и bpwp_filter_export_products для фильтрации категорий и товаров перед экспортом
     98
    9599= 1.7 =
    96100- Исправлены функция определения родительской категории у товара, добавлена документация https://github.com/evgrezanov/bonus-plus-wp/wiki/Export-products-and-product-cat/
Note: See TracChangeset for help on using the changeset viewer.