Ответы пользователя по тегу WordPress
  • Как с помощью шорткода вывести товар woocommerce?

    @V0VA
    На сегодняшний день, такой возможности нет.

    Можно решить вопрос правкой шаблона content-single-product.php
    (предварительно скопировав его в /папка шаблона / woocommerce/ )
    добавив условие на проверку url если нужная страница, то не нужные блоки не отображаются
    <?php 
    	$url = $_SERVER['REQUEST_URI'];
    	$url = explode('?', $url);
    	$url = $url[0];
    	if($url !== "/"){...} // условие показа/скрытия
    ?>
    Ответ написан
    Комментировать
  • Как изменить алгoритм применения купона при расчете бесплатной доставки woocommerce?

    @V0VA Автор вопроса
    Не нашел в свое время решения задачи при использовании этого плагина. Реализовал без него. Выкладываю решение, если кому вдруг понадобится. Порядок действий, создаем на штатной странице настроек доставки woocommerce бесплатные доставки в количестве, равном количеству городов у которых разный порог. В штатных настройках есть возможность настроить правила применения купонов . Добавляем в functions.php активной темы:
    <?
    function hard_remove_shipping_method( $rates, $package ) {
    		$billingSity = WC()->customer->get_billing_city();
    		//задаем через массивы. в будущем проще добавить город к условию	
    		$arr = ['Москва','Санкт-Петербург'];
    		$arrOne = ['Москва'];
    		$arrTwo = ['Санкт-Петербург'];
    		
    		$reRates = $rates;
    		
    		//если не Москва и не Санкт-Петербург,  сработает общее условие для беспл доставки
    		if (!in_array($billingSity, $arr)){
    		//отключаем методы, не подходящие для региона
    			unset( $reRates[ 'local_pickup:10' ] );	//  'local_pickup:10'  и прочие...  у вас вместо этих значений будут ваши можно посмотреть в инструментах разработчика в браузере
    			unset( $reRates[ 'flat_rate:28' ] );
    			unset( $reRates[ 'flat_rate:27' ] );	
    			unset( $reRates[ 'free_shipping:11' ] );
    			unset( $reRates[ 'free_shipping:26' ] );
    			$new_rates = array();
    			
    			// в цикле проверяем,  есть ли бесплатная доставка
    			foreach ( $reRates as $rate_id => $rate ) {
    				if ( 'free_shipping' === $rate->method_id ) { 
    					$new_rates[ $rate_id ] = $rate;
    					break; // бесплатную доставку нашли, выходим из цикла
    				}
    			}
    			//Есть бесплатная, оставляем только ее
    			if (!empty( $new_rates )) {
    				$reRates = $new_rates; 
    			}
    			return 	$reRates;
    		}
    		
    		// если Москва
    		if (in_array($billingSity, $arrOne) ) {
    			unset( $reRates[ 'flat_rate:28' ] );
    			unset( $reRates[ 'flat_rate:41' ] );
    			unset( $reRates[ 'flat_rate:42' ] );	
    			unset( $reRates[ 'flat_rate:43' ] );
    			unset( $reRates[ 'flat_rate:44' ] );
    			unset( $reRates[ 'free_shipping:30' ] );
    			unset( $reRates[ 'free_shipping:26' ] );
    	    	
    			$new_rates = array();
    			foreach ( $reRates as $rate_id => $rate ) {
    				if ( 'free_shipping' === $rate->method_id ) {
    					$new_rates[ $rate_id ] = $rate;
    					break;
    				}
    			}			
    			if (!empty( $new_rates )) {
    				unset( $reRates[ 'flat_rate:27' ] );			
    			}
    			return 	$reRates;
    		}
    		
    		// если Санкт-Петербург
    		if (in_array($billingSity, $arrTwo)) {
    			unset( $reRates[ 'flat_rate:27' ] );
    			unset( $reRates[ 'flat_rate:41' ] );
    			unset( $reRates[ 'flat_rate:42' ] );	
    			unset( $reRates[ 'flat_rate:43' ] );
    			unset( $reRates[ 'flat_rate:44' ] );
    			unset( $reRates[ 'free_shipping:30' ] );
    			unset( $reRates[ 'free_shipping:11' ] );
    			
    			$new_rates = array();
    			foreach ( $reRates as $rate_id => $rate ) {
    				if ( 'free_shipping' === $rate->method_id ) {
    					$new_rates[ $rate_id ] = $rate;
    					break;
    				}
    			}			
    			if (!empty( $new_rates )) {
    				unset( $reRates[ 'flat_rate:28' ] );			
    			}
    			return 	$reRates;
    		}	
    		
    		return $reRates;
    	}
    Ответ написан
    Комментировать