Задать вопрос
  • Отложить загрузку плагина WP?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    PHP собирает HTML и отдает его браузеру клиента. Задерживать работу PHP нет никакого смысла, у клиента просто будет позже открываться сайт. У вас есть три варианта:

    • вынести парсер на сторону клиента
    • делать ajax-запрос на сервер
    • сохранять данные парсера в json/html и обновлять по условию
    Ответ написан
    Комментировать
  • Допустимо ли использовать h1 внутри aside?

    Ankhena
    @Ankhena Куратор тега HTML
    Нежно люблю верстку
    А пойдемте на MDN и посмотрим что там пишут
    HTML-элемент <aside> представляет собой часть документа, чьё содержимое только косвенно связанно с основным содержимым документа. Чаще всего представлен в виде боковой панели, сносок или меток.

    Как там может оказаться h1?
    Ответ написан
    Комментировать
  • На мобильной версии элемент занимает все место справа, как решить?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    @media (max-width: 1200px) {
    .form1 {
        left: 206px;
    }
    }
    .form1 {
    width: 550px;
    }


    Научитесь пользоваться Инструментами разработчика и будет понятно "что как и почему"
    Ответ написан
    2 комментария
  • Как отменить nicescroll на мобилках?

    KickeRocK
    @KickeRocK
    FrontFinish
    if($(window).width() > 768) {
    
    $('#content-scroll').niceScroll()
    }

    768 - для примера.
    Ответ написан
    1 комментарий
  • Как натянуть дополнительную страницу (например контакты) в теме wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    index.php — это не шаблон главной страницы, это самый базовый шаблон, он используется в том случае, если WP не найдет для запроса более подходящий. В этом шаблоне должен быть самый базовый цикл, а для главной лучше использовать front-page.php или home.php

    Чтобы создать страницу с контактами вы можете создать файл с произвольным названием, например template-contacts.php. Обязательно в начале файла должны быть следующие строки и ваша верстка

    /*
    Template Name: Шаблон с контактами
    Template Post Type: page
    */


    После этого в админке, при создании новой записи в разделе «Страницы» у вас появится селект с выбором искомого шаблона

    Чтобы заказчик смог менять информацию на этой странице, вы можете использовать плагины ACF или Carbon Fields, они создают поля, которые можно редактировать в админке. Значения этих полей нужно выводить в вашей верстке, тогда информация будет подгружаться из базы данных

    Советую вам почитать подробнее про иерархию шаблонов, а для закрепления посмотреть как сделаны популярные темы и дефолтные twenty
    Ответ написан
    Комментировать
  • Как написать js в php файле?

    sslion
    @sslion
    615c8d31847e5263399964.png
    кавычки здесь поставь одинарные
    Ответ написан
    Комментировать
  • Где найти задачи по JS от простого к сложному?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    https://www.codewars.com/dashboard

    самые простые - 8q
    самые сложные - 1q

    ЗЫ: самое классное в codewars то, что решив задачу и опубликовав решение вам становятся доступны к просмотру решения данной задачи от других участников, и зачастую эти решения не такие как ваше. Разобрав их - вы узнаете много нового для себя))))
    Ответ написан
    6 комментариев
  • Как правильно подключить отдельно скрипты и стили на разных страницах WordPress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Проще всего проверить post_type, чтобы применить стили для конкретного типа записи. Это условие сработает и для архивных и для сингл страниц

    if ( get_post_type() === 'post' ) {
    	# code...
    }


    Что касается вашей задачи, то понадобится составное условие. Вам нужно убедиться, что вы находитесь в одной из двух категорий или сингл post имеет одну из двух категорий:

    if ( is_category( [ 'news', 'projects' ] ) || ( is_singular( 'post' ) && has_category( [ 'news', 'projects' ] ) ) ) { 
    	# code...
    }
    Ответ написан
    1 комментарий
  • Как скрыть блок оплаты при выборе самовывоза wordpress?

    Всем привет!
    Опять таки , смотрю ни кто более аккуратного способа не предложил,поэтому вот мои
    5 копеек!
    Код проверил на теме storefront и всё работало.
    add_action( 'wp_footer', 'skryt_block_sposoba_oplaty',9999 );
    function skryt_block_sposoba_oplaty() {
    
    	// Создадим переменну со значением выбора способа доставки
    	$chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' )[0];
    
    	// Проверяем выбран ли по умолчанию т.е. при загрузки страницы "самовывоз"? 
    	if ( 0 === strpos( $chosen_shipping_methods, 'local_pickup:3' ) ){
    		?>
    		<!-- Если да , то...  -->
    		<script type="text/javascript">
    			jQuery(document).ready(function($) {
    				// Ждём когда на странице закончится Ajax
    				$( document ).ajaxStop(function() {
    					// После окончания (спустя мгновение) монипулируем DOM-элементами 
    					setTimeout(function(){
    						// Это наш список с выбором способа оплаты
    						var ViborMetodaOplaty = $('div#payment').find('ul.wc_payment_methods') ;
    						// Это пункт выбора способа доставки "самовывоз"
    						var Samovyvoz = $('input#shipping_method_0_local_pickup3') ;
    						// Если НЕ выбран "самовывоз",то...
    						if ( ! Samovyvoz.is(':checked')) {
    							// то показываем список с выбором способа оплаты
    							ViborMetodaOplaty.fadeIn("fast");
    							// Если ВЫБРАН "самовывоз",то...
    						}else{
    							// то через slideUp скрываем список с выбором способа оплаты
    							ViborMetodaOplaty.slideUp( "fast", function() {
    								ViborMetodaOplaty.fadeOut();
    							});
    						};
    					}, 100);
    				});			
    			});
    		</script>
    		<!-- А,что если по умолчанию т.е. при загрузки страницы НЕ ВЫБРАН "самовывоз"?  -->
    	<?php }else{
    		?>
    		<!-- Если так, то...  -->
    		<script type="text/javascript">
    			jQuery(document).ready(function($) {					
    				// Ждём когда на странице закончится Ajax
    				$( document ).ajaxStop(function() {		
    					// После окончания (спустя мгновение) монипулируем DOM-элементами				
    					setTimeout(function(){
    						// Это наш список с выбором способа оплаты
    						var ViborMetodaOplaty = $('div#payment').find('ul.wc_payment_methods') ;
    						// Это пункт выбора способа доставки "самовывоз"
    						var Samovyvoz = $('input#shipping_method_0_local_pickup3') ;
    						// Если ВЫБРАН "самовывоз",то...
    						if ( Samovyvoz.is(':checked')) {
    							// то через slideUp скрываем список с выбором способа оплаты
    							ViborMetodaOplaty.slideUp( "fast", function() {
    								ViborMetodaOplaty.fadeOut();
    							});
    							// Если НЕ выбран "самовывоз",то...
    						}else{
    							// то показываем список с выбором способа оплаты
    							ViborMetodaOplaty.fadeIn();
    						};
    					}, 100);
    				});			
    			});
    		</script>
    		<?php
    	}
    }

    Надеюсь поможет!
    Ответ написан
    1 комментарий
  • Почему h1 выходит за пределы дочери grid-контейнера?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Во-первых, он не выходит



    Во-вторых, нужно точно ставить вопрос



    А ответ очевиден как день:
    всё потому, что контент не помещается в отведённую область.
    Вы же сами написали – 60 пикселей высота шапки.
    Ответ написан
    Комментировать
  • Есть ли смысл новичку учить C# в 2021, если требуют JavaScript?

    Zoominger
    @Zoominger
    System Integrator
    Етить вас мотает.
    JS - фронт, C# - бэк.
    Что лучше - борщ или яблоко?

    Ответ: да, имеет.
    Ответ написан
    8 комментариев
  • Woocommerce баллы за покупки?

    @DimDim7778
    Бесплатное решение:
    https://ru.wordpress.org/plugins/yith-woocommerce-...
    Ответ написан
    Комментировать
  • Как вывести общую сумму скидок в Woocommerce?

    @Mircek Автор вопроса
    UPD: проблему решила сама. Оставляю решение — вдруг у кого-то будет та же задача. В коде заменила

    . wc_price( $discount_total + $woocommerce->cart->discount_cart ) .

    на
    . wc_price( $woocommerce->cart->subtotal - $woocommerce->cart->total + $woocommerce->cart->shipping_total + $discount_total ) .
    .

    Что делает новая строка:
    $woocommerce->cart->subtotal - $woocommerce->cart->total — вычитаем из суммы всех товаров итоговую сумму заказа после применения всех скидок
    + $woocommerce->cart->shipping_total — добавляем стоимость доставки (если этого не сделать, то стоимость доставки вычтется из суммы сэкономленных денег)
    + $discount_total — добавляем сумму индивидуальных скидок на товары (если какой-то товар обычно стоит 1000 руб., но сейчас он на распродаже и стоит 800 руб., то эти 200 рублей тоже нужно учесть как сэкономленные).

    И добавляем условие выводить строку «Вы сэкономили: N руб.» только в том случае, если «сумма товаров + доставка» больше, чем «сумма заказа с учётом всех скидок + доставка» или если в заказе есть товар(ы) с индивидуальной скидкой.

    if ( $woocommerce->cart->subtotal + $woocommerce->cart->shipping_total > $woocommerce->cart->total + $woocommerce->cart->shipping_total || $discount_total > 0 )


    Весь готовый код выглядит так (вставлять в functions.php дочерней темы):

    function wc_discount_total_30() {
     
        global $woocommerce;
          
        $discount_total = 0;
          
        foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values) {
              
       $_product = $values['data'];
      
            if ( $_product->is_on_sale() ) {
            $regular_price = $_product->get_regular_price();
            $sale_price = $_product->get_sale_price();
            $discount = ($regular_price - $sale_price) * $values['quantity'];
            $discount_total += $discount;
            }
      
        }    
                
    if ( $woocommerce->cart->subtotal + $woocommerce->cart->shipping_total > $woocommerce->cart->total + $woocommerce->cart->shipping_total || $discount_total > 0 ) {
    	    
        echo '<tr class="cart-discount">
        <th>'. __( 'Вы сэкономили:', 'woocommerce' ) .'</th>
        <td data-title=" '. __( 'Saved', 'woocommerce' ) .' ">' 
        . wc_price( $woocommerce->cart->subtotal - $woocommerce->cart->total + $woocommerce->cart->shipping_total + $discount_total ) .'</td>
        </tr>';
    }    
     
    }
     
    // Hook our values to the Basket and Checkout pages
     
    add_action( 'woocommerce_cart_totals_after_order_total', 'wc_discount_total_30', 99);
    add_action( 'woocommerce_review_order_after_order_total', 'wc_discount_total_30', 99);


    Решение может быть не самое изысканное, но рабочее (проверено).
    Ответ написан
    Комментировать
  • Как вывести атрибуты товаров woocommerce?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Что бы не получать таких ошибок, нужно делать проверку, а не пуста ли переменная $subheadingvalues. Но это так. А вообще в самом плагине все до вас написано. Атрибуты выводятся в товаре в табе "доп информация", посмотрим код этой табы. plugins/woocommerce/templates/single-product/tabs/additional-information.php
    Код там такой <?php $product->list_attributes(); ?> используется метот list_attributes(); Можно на этом остановиться и в своем шаблоне написать
    global $product;
    $product->list_attributes();

    Но получим готовую разметку в виде таблицы. Посмотрим, что делает функция list_attributes();
    public function list_attributes() {
    		wc_get_template( 'single-product/product-attributes.php', array(
    			'product'    => $this
    		) );
    	}

    Идем в папку за нужным файлом plugins/woocommerce/templates/single-product/product-attributes.php
    Помимо прочего в нем видим
    $attributes = $product->get_attributes();
    .........
    <?php foreach ( $attributes as $attribute ) :
    		if ( empty( $attribute['is_visible'] ) || ( $attribute['is_taxonomy'] && ! taxonomy_exists( $attribute['name'] ) ) ) {
    			continue;
    		} else {
    			$has_row = true;
    		}
    		?>
    		<tr class="<?php if ( ( $alt = $alt * -1 ) == 1 ) echo 'alt'; ?>">
    			<th><?php echo wc_attribute_label( $attribute['name'] ); ?></th>
    			<td><?php
    				if ( $attribute['is_taxonomy'] ) {
    
    					$values = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'names' ) );
    					echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
    
    				} else {
    
    					// Convert pipes to commas and display values
    					$values = array_map( 'trim', explode( WC_DELIMITER, $attribute['value'] ) );
    					echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
    
    				}
    			?></td>
    		</tr>
    	<?php endforeach; ?>

    Адаптируйте под свои нужды. Я думаю, должно работать)

    P.S. Не забываем поглядывать в документацию. Вот полный список того, что можно сделать с $product https://docs.woocommerce.com/wc-apidocs/class-WC_P...
    Ответ написан
    Комментировать
  • Как сделать такой елемент?

    LenovoId
    @LenovoId
    svg, css,js
    Ответ написан
    Комментировать
  • Как сделать такой елемент?

    Как вариант, это можно сделать через clip path
    https://bennettfeely.com/clippy/
    Ответ написан
    Комментировать
  • Как сделать кнопку вверх?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Кнопка вставляется обычно в footer.php, в любое место - она ведь фиксированная.

    <button class="to-top">Up</button>

    .to-top {
    	position: fixed;
    	right: 30px;
    	bottom: 30px;
    	width: 40px;
    	height: 40px;
    	text-align: center;
    	font-size: 0;
    	z-index: 50;
    	opacity: .7;
    	color: #000;
    	background-color: orange;
    	transition: all 0.25s;
    	transform: translateX(100px);
    }
    
    .to-top::before {
    	content: "";
    	width: 14px;
    	height: 14px;
    	border: 2px solid #000;
    	border-left: 0;
    	border-bottom: 0;
    	ransform: rotate(-45deg);
    	position: absolute;
    	top: 16px;
    	left: 13px;
    }
    
    .to-top.active {
    	transform: translateX(0);
    }
    
    .to-top:hover {
    	opacity: 1;
    }

    $('.to-top').on('click', function() {
    	$('body, html').animate({ scrollTop:0 },800);
    	return false;
    });
    
    $(window).scroll(function() {
    	if($(this).scrollTop() > 100) {
    		$('.to-top').addClass('active');
    	} else {
    		$('.to-top').removeClass('active');
    	}
    });
    Ответ написан
    Комментировать
  • Ссылки в шапке идут с начала а не с конца хотя свойтсво flexend применил. Может еще что-то не написал?

    Ankhena
    @Ankhena Куратор тега Вёрстка
    Нежно люблю верстку
    Не очевидно, какого результата нужно достичь, но
    посмотрите https://jsfiddle.net/x6mrLqsy/
    я рамочками обвела каждую из оберток, чтобы вы увидели что у вас происходит.

    Дальше, вы пишете
    .header__inner{
      position: absolute;
      justify-content: flex-end;
    }

    но justify-content не работает без display: flex
    И не ясно зачем ему абсолют. Еще и при том, что нет ни одного родителя с relative.
    Зачем-то родителю .header__inner задан flex, хотя в нем один ребенок, да и тот абсолют.

    Вероятно, вы хотели получить такой результат https://jsfiddle.net/84xh0f1r/
    Ответ написан
    1 комментарий
  • Лимит постов и пагинация на кастомной странице в WP?

    trampick
    @trampick
    Веб-разработчик
    Для пагинации я использую плагин https://ru.wordpress.org/plugins/wp-pagenavi/
    <div class="items">
    <?php
    	$count_items = 10;//кол-во выводимых элементов
    	$paged = get_query_var( 'paged', 1 );//Получаем текущую страницу
    	$id = get_category_by_slug( 'novosti' )->cat_ID;//получаем id рубрики. У меня рубрика новости.
    	$recent = new WP_Query( "cat=$id&posts_per_page=$count_items&paged=$paged" );//Сам запрос
    	while ( $recent->have_posts() ) {
    		$recent->the_post();
    		?>
    		<div class="item">Элемент</div>
    		<?php
    	}
    	wp_reset_postdata();
    ?>
    </div>
    <?php
      wp_pagenavi( array( 'query' => $recent ) );//вывод пагинации по вашему запросу. Все четко:))
    ?>

    В wp_query
    posts_per_page - кол-во выводимых записей
    paged - номер страницы для вывода
    Ответ написан
    4 комментария