• Как сделать грамотный preload Css\JS для сайта под wp?

    Попробуйте абсолютно бесплатный плагин LiteSpeed Cache — он реально помогает с оптимизацией WP:
    Со стилями и скриптами: минификация, объединение, генерация Critical CSS (бесплатно, в отличии от остальных) асинхронная загрузка
    С изображениями: оптимизация, ленивая загрузка
    Со шрифтами: асинхронная загрузка
    А если ещё сайт перенести на хостинг с веб сервером LiteSpeed, то и кэшированием займется, на Apache вроде не работает кэширование.
    У меня с ним страницы грузятся за 0,4-0,6 сек и 1,2-1,6 на мобильных по данным PageSpeed Insight.
    Самое лучшее и удобное решение для WP, установил, один раз настроил и забыл. Работает как часы, сайты летают.
    Ответ написан
    3 комментария
  • Как вывести текстовый блок на определенных страницах товаров в Woocommerce?

    deniscopro
    @deniscopro Куратор тега WordPress
    WordPress-разработчик, denisco.pro
    Привет.

    Можно по ID:
    add_action( 'woocommerce_before_add_to_cart_form', 'my_infa' );
    function my_infa() {
        if ( is_product() && get_the_ID() == 10 ) {
            echo 'Акция!!! подарок';
        }
    }
    Ответ написан
    Комментировать
  • Как из колонки данных сделать таблицу?

    Volounteer
    @Volounteer
    В C1 вставляем формулу:

    =ДВССЫЛ("A"&СТРОКА()+4*(СТОЛБЕЦ(A1)-1))

    Тянем вниз на 4 ячейки, а затем вправо. (решение для тех, у кого нет надстройки Kutools)
    Ответ написан
    1 комментарий
  • Считается ли нормальной практикой добавление контента в WP через написание html кода внутри Gutenberg?

    Нормальной считается практика простого добавления контента через редактор Gutenberg, без заморочек о коде и стилях.
    К любому блоку можно добавить собственный css класс в настройках блока, без html кода.
    5d2d8baa8af4a225436757.png
    Цвет и текст в параграфе можно и без css поменять.
    Возможно вам пригодится такой плагин для дополнительных стилей в блоках.
    Ещё рекомендую плагин atomic blocks
    Ответ написан
    4 комментария
  • Лучший вариант создания мобильного меню на сайте?

    daemonhk
    @daemonhk
    ПсиХоПат
    <noindex>
        <div class="mobile-menu">
            <div class="mobile-head"></div> <!-- бургер, логотип, etc -->
            <div class="mobile-body"></div> <!-- меню, поиск, телефоны, etc -->
        </div>
    </noindex>


    Суть: после определенной ширины браузера, например, 1024, показываем нашу менюшку, по клику на "бургер" - меняем класс у body, например, mobile-open, через который меняем бэкграунд бургера на крестик, а также показываем само мобильное меню:

    .mobile-body {
        width: 100%;
        height: 100vh;
        padding-bottom: 70px; //"волшебное число", даем отступ снизу, чтобы можно было прокручивать полностью менюшку
        background: #fff;
        position: fixed;
        top: 50px; //50px - высота mobile-head, обычно хватает для телефонов
        left: -100%;
        transition: left 0.3s;
        overflow: auto;
        display: block;
    }
    
    body.menu-open .mobile-body {
        left: 0;
    }
    Ответ написан
    Комментировать
  • Как вывести в каталоге Woocommerce вариации товара с ценой и корзиной напротив для каждой?

    DrZhmurge
    @DrZhmurge Автор вопроса
    В файле woocomerce/template/content-product.php после do_action( 'woocommerce_after_shop_loop_item_title' );
    нужно вставить следующий код:
    $args = array(
      'post_type'     => 'product_variation',
      'post_status'   => array( 'private', 'publish' ),
      'numberposts'   => -1,
      'orderby'       => 'menu_order',
      'order'         => 'ASC',
      'post_parent'   => get_the_ID() // get parent post-ID
    );
    $variations = get_posts( $args ); 
     
    foreach ( $variations as $variation ) {
      
      // get variation ID
      $variation_ID = $variation->ID;
     
      // get variations meta
      $product_variation = new WC_Product_Variation( $variation_ID );
     
      // get variation featured image
      $variation_image = $product_variation->get_image();
     
      // get variation price
      $variation_price = $product_variation->get_price_html();
           //get variation name
      $variation_name = $product_variation->get_variation_attributes();
    echo "<p class='product_price' >";
    if ( $variation_name [ 'attribute_pa_СЛАГ_АТРИБУТА' ] ) {
        $fasovka = [ 'attribute_pa_СЛАГ_АТРИБУТА' => $variation_name [ 'attribute_pa_СЛАГ_АТРИБУТА'] ];
        echo wc_get_formatted_variation ( $fasovka );
    }
    echo ($variation_price);
    echo "</p>";
    }
    Ответ написан
    3 комментария
  • Как организовать вывод записей в wordpress, чтобы каждая запись имела контейнер с определенным классом?

    @Lord_Dantes
    Смотрите. Первое это нужно настроить ACF на создание чек-бокса в котором юзер будет определять какой вид ему больше подходит при создании записи.
    В чек-боксе варианты следующие: "Широкий вид", "Стандарт" и "Высокий вид"(как вы и указали).
    Все, у нас есть чекбоксы, у каждого есть свои так сказать key: value(это будет при создании чекбокса в Группе Полей ACF).
    Далее идем в цикл и указываем такое условие.
    *начало цикла*
    if( get_field('group-select') == 'high' ):
    			и тут мы пишем допустим вашу обертку с нужным классом
    		elseif ( get_field('group-select') == 'default' ):
    			сюда пишем обычную в вашем случае маленькую обертку с нужным классом
    		elseif( get_field('group-select') == 'high-width' ):
    			и сюда пишем широкую обертку и тд крч
    		endif;

    *конец цикла*
    Айди записи вычисляется автоматом в цикле
    Комментарии*
    group-select = название вашего поля в ACF (не одного поля, а в общем поля с элементами чек-бокса.
    get_field = получить поле
    (group-select == value) Это при указании элемента чек-бокса его "ключа". Не путать с названием.

    Вот вроде бы все
    Ответ написан
    6 комментариев
  • Каким путем пойти, чтобы создать маркетплейс?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    1. В чем подводные камни готовых темы Wordpress?
    В том что это вордпресс? Ни нормальной архитектуры, ни нормальной функциональности вы на базе движка блогов не получите. Да, он популярен, в основном за счет простоты базовой настройки, но как только возникает задача чуть сложнее вывести 20 записей блога на страничку - начинаются вопросы как с реализацией, так и с производительностью.

    2. Может нужна другая CMS?
    При серьезном подходе цмс как вариант для коммерческого проекта отпадает сразу, вы можете пожертвовать некоторым функционалом для создания MVP, но "писать" на цмс коммерческий продукт = стрелять себе в ногу в начале гонки.

    3. В будущем нужно будет разрабатывать сайт с нуля или получится улучшать первоначальную версию?
    В цмс основная фича - возми готовое как есть и пользуйся, в этом виде оно хорошо выполняет свою задачу, во всех случаях требующих серьезной кастомизации цмс - не обладает достаточной гибкостью для этого, или эта гибкость выходит боком, в следствие заложенных в основу "универсальных алгоритмов", которые, естественно, всегда будут уступать специальным, которые подходят под конкретную задачу.

    4. Какие есть другие варианты (готовые решения, заказать разработку)?
    Готовые решения наверняка есть, другой вопрос на чем и как они написаны, + всегда остается вопрос работы над кастомными фишками, которые собственно определяют конкурентное преимущество, ну, не считая рекламы, без которой все вложенные средства в разработку лучше потратить на хавчик и бухло - пользы будет больше, а нервов потратится меньше.

    5. Сколько это может стоить?
    Как договоритесь, может за 300 баксов, может за 20 000 баксов, без ТЗ и дизайна никто не скажет, суть в том что требуется определенное количество человекочасов на ту или иную фишку, почти все можно посчитать +-, но все равно на 100% никто не уверен что учли все-все, где то да возникнут неопределенные моменты, неучтенные нюансы и т.п., так что сначала ТЗ, потом оценка.
    Ответ написан
    22 комментария
  • Woocommerce. Как вывести карту категорий товаров?

    andrashh
    @andrashh
    Почему бы и да?
    Подправь как нужно. Можешь вывести основную переменную цикла в print_r, если доп данные нужн.
    <?php $terms = get_terms( array(
    		'taxonomy' => 'product_cat',
    		'hide_empty' => true,
    		'pad_counts'=> true,
    		'orderby' => 'name',
    		'parent' => 0
    	) ); ?>  
    
    	<?php if($terms) : ?>
    	<?php foreach($terms as $term) : ?>
    
    		<h2 class="subcategory-title"><a href="<?php echo get_term_link($term->term_id);?>"><?php echo $term->name;?></a></h2>
    		<!--<div class="subcategory-descripton"><p><?php //if($term->description) : ?><?php //echo $term->description; ?><?php //else: ?>Описание термина таксономии<?php //endif; ?></p></div>-->
    
    		<?php // Создаем массив терминов детей текущего термина текущей таксономии
    		$tax = $term->taxonomy;
    		$children_terms = get_terms( array(
    			'taxonomy' => $tax,
    			'hide_empty' => false,
    			'parent' => $term->term_id
    		) ); ?>
    
    		<?php if($children_terms): // если есть дочерние категории ?>
    			<ul><?php foreach ($children_terms as $children_term) : ?>
    			<?php $link = get_term_link($children_term); ?>
    
    				<li style="margin-left: 10px;"><a href="<?php echo $link ?>";><?php echo $children_term->name ?></a></li>
    				<!--<p class="count"><?php //echo $children_term->count ?></p>-->
    
    			<?php endforeach; ?></ul>
    		<?php endif; // конец условия - если есть дочерние термины таксономии ?>  
    
    	<?php endforeach; ?>
    	<?php endif; ?>

    вот вывод количества. Под заголовком нужно разместить.
    <p class="count"><?php if ($term->count > 0) : ?><?php echo $term->count; ?><?php else: ?>0<?php endif; ?></p>
    Ответ написан
    Комментировать
  • Как добавить в вариативный товар примечание?

    mihdan
    @mihdan
    WordPress-евангелист, ведущий РНР - разработчик
    Нужно добавить кастомное поле для каждой вариации. Пример есть здесь или здесь.
    Ответ написан
    1 комментарий
  • Как запускают код прямо в IDE?

    Jossnix
    @Jossnix
    tester
    Расширение Code Runner позволяет запускать JS и много чего ещё.
    Ответ написан
    Комментировать
  • Как решить проблему CORS при работе с Wordpress API?

    xakplant
    @xakplant
    Автор сайта xakplant.ru
    В некоторых случаях заголовок Access-Control-Allow-Origin не достаточно поставить в значение "*". Для некоторых ситуаций нужно указывать точный адрес которого можно отправлять запросы, например, если вы пытаетесь авторизоваться на сервере, предать заголовки или вам нужно прочитать заголовки ответа.
    Я написал несколько примером в статье. Возможно кому-то пригодиться
    Ответ написан
    Комментировать
  • Как держит Wordpress 500 и более страниц на Visual Composer?

    mihdan
    @mihdan
    WordPress-евангелист, ведущий РНР - разработчик
    Вот вам пример сайта, построенного на WordPress, где статьи верстаются в Visual Composer.

    nginx + MariaDB + php-fpm + Redis + wp-rocket
    Ответ написан
    2 комментария
  • Как обновлять или чистить из кеша js css файлы у клиента?

    mahmudchon
    @mahmudchon
    time будет каждый раз выдавать новое значение, поэтому лучше использовать filemtime. Это функция, которая возвращает время последнего редактирования файла.
    В таком случае у вас информация всегда актуальная будет, и каждый раз скрипты и стили заново грузить не потребуется.
    Ответ написан
    Комментировать
  • Добавить изображение по API или POST?

    megafax
    @megafax
    web-программист
    Используйте FILE API для загрузки файла на сервер
    Ответ написан
    Комментировать
  • Wordpress: можно ли сделать полноценный отдельный шаблон для мобильных?

    deniscopro
    @deniscopro Куратор тега WordPress
    WordPress-разработчик, denisco.pro
    Добрый день.

    Any Mobile Theme Switcher. В настройках можно указать для каких устройств какую тему показывать.

    Если в рамках одной темы, то можно использовать хук template_include и с помощью проверки на мобильные, подключать разные шаблоны.
    add_filter( 'template_include', 'mobile_template', 99 );
    
    function mobile_template( $template ) {
    
    	if ( wp_is_mobile()   ) {
    		$new_template = locate_template( array( 'mobile-template.php' ) );
    		if ( '' != $new_template ) {
    			return $new_template;
    		}
    	}
    
    	return $template;
    }


    Мне же нужно чтобы меню было в другом месте, другого вида.

    Обычно такие вопросы решаются с помощью css-правил и, возможно, js. Скрываем одно меню, показываем другое.
    Ответ написан
    5 комментариев
  • Как настроить ленивую загрузку изображений в шаблоне страницы wordpress?

    Nazariy
    @Nazariy Автор вопроса
    Разобрался, a3 Lazy Load работает на основе Lazy Load XT jQuery, внем же уже все было, необходимо только img src заменить на img data-src для необходимых изображений:
    <?php
    /**
     * The template for displaying all single posts
     */
    get_header(); ?>
    <div class="container">
    <img data-src="<?php echo get_template_directory_uri() ?>/img/example.jpg"  alt="example">
    </div>
    <?php
    get_footer();
    Ответ написан
    Комментировать
  • Как лучше всего учиться работать с вордпресс программисту?

    titov_andrei
    @titov_andrei
    All my life I learn - and die a fool!
    Что ещё хуже той ситуации, которую вы написали - это когда вы вступаете в отношения с вашим прямым заказчиком и всё ваше представление о стройной и систематизированной структуре разработки, которую вы вычитали из книг и полюбили (возомнили) - летит кувырком, спотыкаясь о фразы "а мы так хотим" и "нужно срочно".

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

    Поэтому практика и самообладание уравновешенностью.
    Ответ написан
    Комментировать
  • Как сделать счётчик просмотров статьёй?

    Я делал через куки на 1 час, чтобы не считать несколько раз.
    Далее к каждой статье создается поле количества просмотров.
    Если куки есть - пропускам, если нет - прибавляем 1.
    Функция подсчета:
    # Подсчет количества посещений страницы
    function set_postviews() {
    
      $count_key    = 'post_views_count';  // Имя поля для записи количества просмотров
    	$who_count    = 1;	// 0 - считать всех, 1 - только гостей, 2 - только зарегистрированных пользователей
    	$exclude_bots = 1;	// 0 - считать всех, 1 - исключить из подсчета ботов
    
    	global $user_ID, $post, $cookie_test;
    
    	# Проверка, что не было просмотра страницы в течение часа
    	if( is_singular() && $cookie_test) {
    
    		$id = (int)$post->ID;
    		static $post_views = false;
    		if( $post_views ) return true; // чтобы 1 раз за поток
    
    		$post_views = (int)get_post_meta( $id, $count_key, true );
    
    		# Проверка пользователя: гость или зарегистрирован
    		$should_count = false;
    		switch( (int)$who_count ) {
    			case 0: $should_count = true;
    				break;
    			case 1:
    				if( (int)$user_ID == 0 )
    					$should_count = true;
    				break;
    			case 2:
    				if( (int)$user_ID > 0 )
    					$should_count = true;
    				break;
    		}
    
    		# Проверка на браузер или не бот, иначе false
    		if( (int)$exclude_bots == 1 && $should_count ){
    			$useragent = $_SERVER['HTTP_USER_AGENT'];
    			$notbot = "Mozilla|Opera"; //Chrome|Safari|Firefox|Netscape - все равны Mozilla
    			$bot = "Bot/|robot|Slurp/|yahoo"; //Яндекс иногда как Mozilla представляется
    			if ( !preg_match("/$notbot/i", $useragent ) || preg_match( "!$bot!i", $useragent ) )
    				$should_count = false;
    		}
    
    		# Обновляем счетик, если поля нет, то создаем со значением 1
    		if( $should_count )
    			if( !update_post_meta( $id, $count_key, ($post_views+1)) ) add_post_meta( $id, $count_key, 1, true );
    	}
    	return true;
    }
    add_action('wp_head', 'set_postviews');


    Куки так:
    /*
    * Создаем куки, чтобы дважды не считать один и тот же пост в течение 1 часа
    *
    *			в самое начало single.php пропишем:
    *			<?php
    *				global $cookie_test;
    *				$cookie_test = false;
    *
    *				# Определяем имя файла (поста)
    *				$url = parse_url($_SERVER['REQUEST_URI']);
    *				$path = pathinfo($url['path']);
    *				$basename = $path['basename'];
    *
    *				if( $basename && !isset($_COOKIE[$basename]) ) {
    *					$cookie_test = true;
    *					setcookie( $basename, '1', time()+3600 );
    *				}
    *			?>
    **/
    Ответ написан
    6 комментариев
  • Как изменить ссылку для восстановления пароля?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Во-первых, ссылка должна приходить /wp-login.php?action=lostpassword, а не wp-admin.

    Что касается изменения этой ссылки - можете поискать плагины в репозитории, они есть. Если вы не разработчик, который понимает что делает, сами не пытайтесь "написать" эту фичу основываясь на ответах на Тостере - здесь есть ряд вопросов по безопасности, которые нужно досконально понимать. Кратко - встроенная система (wp-login.php) блокируется, вместо нее создаются свои rewrite rules, им отдаются нужные templates, в которых размещены свои формы, у которых есть свои обработчики. Или, вместо rewrite rules используются страницы, созданные в админке, а в их шаблоны или шорткодами выводятся формы и далее опять же свои обработчики. Если хотите углубиться - изучите вот этот урок. Впрочем, он уже староват, можете гуглить по плюс-минус тем же ключевым словам.
    Ответ написан
    Комментировать