Ответы пользователя по тегу WooСommerce
  • Как загрузить характеристики товара для дальнейшей фильтрации?

    foxayb
    @foxayb Автор вопроса
    newbie
    Кому интересно - решение я реализовал следующее:
    Т.к. плагин "WP All import" нужно использовать в связке с другим плагином "WooCommerce Add-On Pro", соответственно он и отвечает за загрузку атрибутов и ограничивает их на 28 смв. в слаге, то в файле /wp-content/plugins/wpai-woocommerce-add-on/libraries/services/XmlImportWooTaxonomyService.php, в функции public function createTaxonomy($attr_name, $prefix = 1) (72 линия) нужно прописать следующее:
    spoiler
    /**
         *
         * Create new taxonomy.
         *
         * @param $attr_name
         * @param int $prefix
         * @return string
         */
        public function createTaxonomy($attr_name, $prefix = 1) {
    		$attr_name_fix = $attr_name; //зафиксил
    		$attr_name = substr($attr_name, 0, 27);  //обрезал имя
            $attr_name_real = $prefix > 1 ? $attr_name . " " . $prefix : $attr_name;
            $attribute_name = wc_sanitize_taxonomy_name( stripslashes( (string) $attr_name_real ) );
    		
    	//	$bsk = rand(10,999);
    		$attribute_name = substr($attribute_name, 0, 27);  //обрезал url
    		
            $args = array(
                'attribute_label'   => stripslashes( (string) $attr_name_fix ), //применил фикс к лейблу
                'attribute_name'    => $attribute_name,
                'attribute_type'    => 'select',
                'attribute_orderby' => 'menu_order',
                'attribute_public'  => 1
            );
    
    
            if ( ! taxonomy_exists( wc_attribute_taxonomy_name( $attr_name_real ) ) ) {
                if ( in_array( wc_sanitize_taxonomy_name( stripslashes( (string) $attr_name_real)), $this->reserved_terms ) ) {
                    $prefix++;
                    return $this->createTaxonomy($attr_name, $prefix);
                }
                else {
                    // Register the taxonomy now so that the import works!
                    $domain = wc_attribute_taxonomy_name( $attribute_name );
                    if (strlen($domain) < 31){
                        register_taxonomy( $domain,
                            apply_filters( 'woocommerce_taxonomy_objects_' . $domain, array('product') ),
                            apply_filters( 'woocommerce_taxonomy_args_' . $domain, array(
                                'hierarchical' => true,
                                'show_ui' => false,
                                'query_var' => true,
                                'rewrite' => false,
                            ) )
                        );
                        $this->createWooCommerceAttribute($args);
                        $this->getLogger() and call_user_func($this->getLogger(), sprintf(__('- <b>CREATED</b>: Taxonomy attribute “%s” have been successfully created.', \PMWI_Plugin::TEXT_DOMAIN), wc_attribute_taxonomy_name( $attribute_name )));
                    }
                    else {     				
    					$this->getLogger() and call_user_func($this->getLogger(), sprintf(__('- <b>WARNING</b>: Taxonomy “%s” name is more than 28 characters. Change it, please.', \PMWI_Plugin::TEXT_DOMAIN), $attr_name));
    				}
                }
            }
            else {
                if ( in_array( wc_sanitize_taxonomy_name( stripslashes( (string) $attr_name_real)), $this->reserved_terms ) ) {
                    $prefix++;
                    return $this->createTaxonomy($attr_name, $prefix);
                }
            }
    
            if (!wc_attribute_taxonomy_id_by_name($attr_name_real) && strlen($attribute_name) < 31) {
               $this->createWooCommerceAttribute($args);
            }
    
            return $attr_name_real;
        }


    на выходе мы получим такой эффект: при импорте все атрибуты, что имеют название более 27 символов будут обрезаться в слаге (url), что позволит все успешно импортировать, а названия сохранят свою длину.
    Ответ написан
    1 комментарий