Ответы в темах

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • @tuxfighter даже если оформлять заказ не шагами, а в рамках одной страницы, все равно при таких связях и зависимости одних полей от других пришлось бы менять порядок. Спасибо за совет!

    @tuxfighter Прошу прощения, это всё недосып. Я имела в виду — плагин 🙂

    Наверно, это действительно так, т.к. поиск мне не помог. Но раз методы доставки меняются в зависимости от выбранного города, а затем выбранный метод доставки может сам заполнить поля адреса, или от выбора метода доставки будет зависеть необходимость или отсутствие необходимости заполнения полей, то и логично расположить это последовательно, в рамках одного или 2-х шагов:
    1. Выбор города.
    2. Выбор метода доставки, доступного для этого города.
    3. Просмотр автозаполненных плагином полей, или самостоятельное заполнение, или переход на следующий шаг, если заполнение не требуется.

    Иначе человеку придется скакать по шагам. Например, он заполнит поля доставки в шаге доставки, а в финальном шаге потыкает по пунктам самовывоза, чтобы посмотреть, где они есть, а потом все же остановится на варианте с доставкой. Но плагин автоматически перезаполнит поле адреса, а клиент даже не будет этого знать, т.к. эти поля остались в предыдущем шаге, вне зоны видимости. Ну и другие ошибки в таком духе возможны.

    @tuxfighter Да, модулей Multistep много, но они все работают по единому принципу — берут готовые блоки шаблона woocommerce, и рассовывают их по шагам. Ни один из них не вытащит woocommerce-shipping-methods из order_review и не вставит их в блок shipping_fields или billing_fields

    @tuxfighter спасибо, что помогаете таким дуракам, как я)

    Вижу ещё второй вариант — в настройках woocommerce установить «доставка принудительно до платёжного адреса клиента» сделать всегда видимым блок с shipping_fields, скрыть чекбокс, скрыть shipping_fields и вывести вместо них billing_fields.

    Тогда не придется трогать плагин доставки Shiptor и будет корректно выводиться его карта.

    Но, вопрос, как вывести список методов доставки между выбором города и полями адреса остается открытым. Точно так же, как и я не знаю, как технически перенести billing-поля в блок shipping.

    Тоже бьюсь с этой проблемой.
    Раскопала совет на каком-то форуме, результаты дал, но лучше не стало 🙂

    Внесла правки в файле плагина woocommerce для WPAI record.php.
    Находится здесь:
    «../wp-content/plugins/woocommerce-xml-csv-product-import/models/import/record.php»
    Заменила допустимую длину названия атрибута с 31 на своё число.
    http://prntscr.com/n8o8yo

    Проблема с тем, что не создавались атрибуты — ушла. Атрибуты создаются, вместе со слагами, которые автоматически обрезаются по на дефолтных 28 символах.

    Но появилась другая проблема.
    Раньше при импорте 1 уникальный атрибут создавался 1 раз и использовался во всех импортируемых товарах. Теперь он создается столько раз, сколько есть товаров в импорте, в которых ему присвоено значение. Или даже без учёта этого, просто по к-ву товаров (не вникала). Во всех случаях слаг для дублирующегося атрибута создается один и тот же.
    http://prntscr.com/n8oj9z

    Так как я не программист, то не могу решить сама этот вопрос…
    Может, кто подскажет, что нужно доделать 🙂
    Думаю, было бы идеально сменить функционал с создания и проверки по имени атрибута на создание и проверку по слагу (т.к. бывают атрибуты, называющиеся одинаково, но с разными значениями; например «состояние = жидкий или твердый» или «состояние = новый или б/у».

    Прикладываю код функции:

        function create_taxonomy($attr_name, $logger, $prefix = 1){
    		
    		global $woocommerce;
    
            $attr_name_real = $prefix > 1 ? $attr_name . " " . $prefix : $attr_name;
    
    		if ( ! taxonomy_exists( wc_attribute_taxonomy_name( $attr_name_real ) ) ) {
    
    	 		// Grab the submitted data							
    			$attribute_name    = ( isset( $attr_name ) ) ? wc_sanitize_taxonomy_name( stripslashes( (string) $attr_name_real ) ) : '';
    			$attribute_label   = stripslashes( (string) $attr_name );
    			$attribute_type    = 'select';
    			$attribute_orderby = 'menu_order';						
    
    			if ( in_array( wc_sanitize_taxonomy_name( stripslashes( (string) $attr_name_real)), $this->reserved_terms ) ) {
                    $prefix++;
                    return $this->create_taxonomy($attr_name, $logger, $prefix);
    				//$logger and call_user_func($logger, sprintf(__('- <b>WARNING</b>: Slug “%s” is not allowed because it is a reserved term. Change it, please.', 'wpai_woocommerce_addon_plugin'), wc_attribute_taxonomy_name( $attribute_name )));
    			}			
    			else{				
    
    				// Register the taxonomy now so that the import works!
    				$domain = wc_attribute_taxonomy_name( $attr_name_real );
    				if (strlen($domain) < 128){
    
    					$this->wpdb->insert(
    						$this->wpdb->prefix . 'woocommerce_attribute_taxonomies',
                            array(
                                'attribute_label'   => $attribute_label,
                                'attribute_name'    => $attribute_name,
                                'attribute_type'    => $attribute_type,
                                'attribute_orderby' => $attribute_orderby,
                                'attribute_public'  => 1
                            )
    					);												
    
    					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,
    				        ) )
    				    );
    
    					delete_transient( 'wc_attribute_taxonomies' );
    					$attribute_taxonomies = $this->wpdb->get_results( "SELECT * FROM " . $this->wpdb->prefix . "woocommerce_attribute_taxonomies" );
    					set_transient( 'wc_attribute_taxonomies', $attribute_taxonomies );
    
    					$logger and call_user_func($logger, sprintf(__('- <b>CREATED</b>: Taxonomy attribute “%s” have been successfully created.', 'wpai_woocommerce_addon_plugin'), wc_attribute_taxonomy_name( $attribute_name )));
    
    				}
    				else{
    					$logger and call_user_func($logger, sprintf(__('- <b>WARNING</b>: Taxonomy “%s” name is more than 128 characters. Change it, please.', 'wpai_woocommerce_addon_plugin'), $attr_name));
    				}				
    			}
    	 	}
    	 	else{
                if ( in_array( wc_sanitize_taxonomy_name( stripslashes( (string) $attr_name_real)), $this->reserved_terms ) ) {
                    $prefix++;
                    return $this->create_taxonomy($attr_name, $logger, $prefix);
                    //$logger and call_user_func($logger, sprintf(__('- <b>WARNING</b>: Slug “%s” is not allowed because it is a reserved term. Change it, please.', 'wpai_woocommerce_addon_plugin'), wc_attribute_taxonomy_name( $attribute_name )));
                }
            }
    
            return $attr_name_real;
    	}

    @wpgear спасибо! сделала!
    Теперь я чуть-чуть программист))

    2 — пыталась пойти таким путем, закосячила, когда полезла править в плагине. Теперь понимаю, как с этим работать.
    3 — наверно, это уменьшение ширины или масштаба сайдбара до нуля.

    Ну это только мое предположение. Я не программист, просто встала задача быстренько сделать сайт, и пришлось ее решать — естественно, через плагины.
    Касаемо кода — понимаю, что написано на css и html (иногда с помощью htmlbook), и о чем идет речь в php (не без помощи гугл), но сама навыками написания не владею. Максимум html-теги :))))) Про js вообще молчу)

    @tuxfighter могу попробовать предположить, что 2 и 3 — через правку шаблона и через функции.
    но скрыть сайдбар / растянуть содержимое через css, по вашему совету, для меня точно проще 🙂

    @tuxfighter большое спасибо за исчёрпывающий ответ! Это как раз то, что мне было нужно.
    Понимала, что требуются эти 2 действия, но писать css сама не умею.
    @denisco спасибо за дополнение, об этом знаю.

    Возможно, действительно допустила ошибку, т.к. абсолютно далека от программирования.

    Вставляла в single-product.php

    <?php

    Ваш код

    ?>

    • Ответ изменён 2 года, 1 месяц назад пользователем Yui. Причина: контакты на форуме оставлять не нужно

    @virusook

    Но я думаю, такой способ будет работать не в шаблоне, а в доп.стилях css:
    https://prnt.sc/m3iy6y

    Вот только как его прописать, чтобы выключать сайдбар именно в шаблоне товара, а не по всему сайту?

    @virusook

    Спасибо! Но… так оно не работает) выдает ошибку и валит сайт 🙁

    Спасибо, учту на будущее. На всякий случай всегда делаю копию перед внесением изменений.

    Остальные удаления сайдбара делала в теме. Но каких-либо признаков редактирования шаблона именно карточки товара в ней не могу найти. И по логике вещей, шаблон карточки товара принадлежит именно плагину Woocommerce, а не теме.

    Думаю, если шаблон карточки товара принадлежит плагину, то выключить сайдбар в карточке товара можно через функции темы Storefront. Но я, к сожалению, ни капли не программист и не могу это написать.

    • Ответ изменён 2 года, 1 месяц назад пользователем mvlepina.
Просмотр 14 ответов — с 1 по 14 (всего 14)