Задать вопрос
  • Как правильно использовать .on?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    $( ".menuForm" ).on(
    "click", ".add_menu_item", function() {
        alert("AAAAAAAAAAAAAA");
    
        $(".AJAX-menu-loading").fadeIn(100);
        $(".menu-item").clone().appendTo(".menuForm");
        $(".AJAX-menu-loading").fadeOut(100);
    
    });
    Ответ написан
    5 комментариев
  • Почему не выводится список записей WP?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    оно немного не так работает. обратите внимание, что когда вы назначаете страницой блога вашу страницу у вас пропадает выбор шаблона и возможность ее редактировать.
    В этот момент шаблоном начинает использоваться index.php или если есть home.php.
    Если вы хотите использовать для блога шаблон с другим названием, например page-blog.php, то не назначайте его станицей вывода записей. оставьте там как было - Выбрать
    Ответ написан
  • Как в woocommerce создать собственный сайдбар?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    // отключение сайдбара
    remove_action( 'woocommerce_sidebar', 'woocommerce_get_sidebar', 10 );
    
    add_action( 'woocommerce_sidebar', 'standart_sidebar', 10 );
    function standart_sidebar() {
      get_template_part( 'sidebar' );
      //get_sidebar();
    }

    оба варианта работают
    Ответ написан
  • Как поднять блок на самый верх?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    .home.blog .site-header, .home.page:not(.page-template-template-homepage) .site-header, .home.post-type-archive-product .site-header {
      margin-bottom: 0;
    }

    Скорее всего часть селекторов надо убрать, и оставить только те, которые относятся к главной странице, лазить по сайту и проверять лень
    Ответ написан
    1 комментарий
  • Как использовать WooCommerce со своей темой?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Вукомерс создает стандартные страницы, для которых используется шаблон page.php (да и собственно даже на шаблоне index.php должно работать, если нет нужных шаблонов) и вставляет туда шорткоды вывода информации, например на странице My Account должен быть шорткод [woocommerce_my_account]. Все должно работать без всяких переносов темплейтов из плагина. Вы чтото не так делаете
    Ответ написан
    8 комментариев
  • Как подключить три слайдера и карусель slick?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Каждому слайдеру свой класс и 3 инициализации
    Ответ написан
    Комментировать
  • Как сделать раздел в слайдбаре сквозным?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Сайдбар это в принципе сквозной элемент на сайте.
    Вывести туда виджет можно как минимум двумя способами - тот код, который вы планировали для вывода оформить в виде виджета и вставлять прямо из меню виджетов, можно этот код прямо вставить в сайдбар

    Почитав комментарии, я не уверен, что вам это чтото даст, тем не менее у меня есть пример кода:
    Код

    <?php
    
    $actualLoop = new WP_Query(array(
    	'posts_per_page' => 5,
    	'post_type'      => 'post',
    	'orderby'        => 'date',
    	'order'          => 'DESC',
    	'meta_query'     => array(
    		array(
    			'key'     => 'is_actual',
    			'value'   => '1',
    			'compare' => 'LIKE',
    		)
    	),
    ));
    
    if ( $actualLoop->have_posts() ) : ?>
    
    <div class="sidebar-inner-right">
    	<h2 class="sidebar-title"><?php _e('Актуально') ?></h2>
    
    	<?php while ( $actualLoop->have_posts() ) : $actualLoop->the_post();
    		$is_actual = get_field('is_actual');
    	?>
    
    		<?php if ($is_actual): ?>
    
    		<a href="<?php the_permalink() ?>">
    			<div class="news-img-block">
    				<div class="img-wrapper">
    					<?php if (has_post_thumbnail()) {
    						the_post_thumbnail('blog-thumb');
    					}else{
    						echo '<img class="no-img" src="'. get_bloginfo('template_directory'). '/assets/img/no-thumbnail.jpg' . '" alt="no image">';
    					}?>
    				</div>
    				<h3 class="news-img-block-title"><?php trim_title_words(10, '...'); ?></h3>
    				<div class="news-block-info">
    					<div class="news-block-info-item news-block-date">
    						<?php echo theCustomDate() ?>
    					</div>
    					<div class="news-block-info-item news-block-views">
    						<?php _e('Переглядів:') ?> 
    						<?php echo getPostViews(get_the_ID()); ?>
    					</div>
    					<div class="news-block-info-item news-block-comments">
    						<?php echo num_comments() ?>
    					</div>
    				</div>
    				<div class="news-block-excerpt">
    					<?php echo kama_excerpt( array('maxchar'=>80) ); ?>
    				</div>
    			</div>
    		</a>
    
    		<?php endif ?>
    
    	<?php endwhile;?>
    
    </div>
    
    <?php endif; wp_reset_query(); ?>


    Сама разметка каждого итема понятно что будет своя.
    Тут мы имеем в каждой записи возможность установить чекбокс, это кастомное поле со слагом is_actual, в моем случае сделанное с помощью ACF. Если флажок установлен - запись будет выводится.
    Этот код я вставлял прямо в сайдбар
    Ответ написан
  • Wordpress: почему один из элементов меню перекидывает на главную страницу?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Если я правильно понял, то вы зарегистрировали новый тип записей works. Для того, чтобы сделать страницу, на которой выводить все записи типа works нужно сделать шаблон archive-works.php
    Ответ написан
  • Как сделать первый пост во всю ширину wordpress?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Если вы используете готовую тему, то сначала нужно создать дочернюю тему.
    Если тема ваша - то не обязательно.
    Найдите шаблон, который используется для вывода записей.
    Переопределите его в дочерней теме или правьте в вашей.
    Для того чтобы вывести первый пост другой версткой можно воспользоваться счетчиком:

    <?php if ( have_posts() ) : $ir = 0; while ( have_posts() ) : the_post();
    
    	if ( $ir == 0 ) {
    		get_template_part( 'template-parts/article-wide' );
    	} else {
    		get_template_part( 'template-parts/article' );
    	}
    
    $ir++; endwhile; endif; ?>
    Ответ написан
    Комментировать
  • Как разделить подкатегории и товары в Woocomerce?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    // Move WooCommerce subcategory list items into heir own <ul> separate from the product <ul>
    add_action( 'init', 'move_subcat_lis' );
    
    function move_subcat_lis() {
    	// Remove the subcat <li>s from the old location.
    	remove_filter( 'woocommerce_product_loop_start', 'woocommerce_maybe_show_product_subcategories' );
    	add_action( 'woocommerce_before_shop_loop', 'msc_product_loop_start', 40 );
    	add_action( 'woocommerce_before_shop_loop', 'msc_maybe_show_product_subcategories', 50 );
    	add_action( 'woocommerce_before_shop_loop', 'msc_product_loop_end', 60 );
    }
    
    //Conditonally start the product loop with a <ul> contaner if subcats exist.
    function msc_product_loop_start() {
    	$subcategories = woocommerce_maybe_show_product_subcategories();
    	if ( $subcategories ) {
    		echo '<ul class="archive-category-wrapper">';
    	}
    }
    
    //Print the subcat <li>s in our new location.
    function msc_maybe_show_product_subcategories() {
    	echo woocommerce_maybe_show_product_subcategories();
    }
    
    //Conditonally end the product loop with a </ul> if subcats exist.
    function msc_product_loop_end() {
    	$subcategories = woocommerce_maybe_show_product_subcategories();
    	if ( $subcategories ) {
    		echo '</ul>';
    	}
    }
    Ответ написан
    2 комментария
  • Можно ли использовать div сразу после row?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    начиная еще с третьего бутстрапа в его валидаторе было основное правило, что родителями колонок могут быть только ряды, а дочерними элементами рядов - колонки. Это связано со стилями сетки. В частности в четвертом бутстрапе у рядов стоит дисплей флекс, что подразумевает его влияние на потомков. Также рекомендуется не смешивать сетку и разметку, тоесть например какието карточки вставлять в колонки, а не делать карточками колонки.
    Но, конечно, вам никто не запрещает делать как захочется
    Ответ написан
    Комментировать
  • Как лучше реализовать смену языка на сайте?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Вот пример кода

    Кусок разметки
    <nav class="site-nav">
    	<ul id="navigation">
    		<li data-menuanchor="about-us">
    			<a href="#about-us" data-lang="about_academy">Про академию</a>
    		</li>
    		<li data-menuanchor="what-we-offer">
    			<a href="#what-we-offer" data-lang="proposal">Что мы предлагаем</a>
    		</li>
    		<li data-menuanchor="your-benefits">
    			<a href="#your-benefits" data-lang="your_result">Что ты получишь</a>
    		</li>
    		<li data-menuanchor="our-blog">
    			<a href="#our-blog" data-lang="blog">Блог</a>
    		</li>
    		<li data-menuanchor="testimonials">
    			<a href="#testimonials" data-lang="feedback">Отзывы</a>
    		</li>
    		<li data-menuanchor="contacts">
    			<a href="#contacts" data-lang="contacts">Контакты</a>
    		</li>
    		<li class="language-switcher-wrapper">
    			<button class="language-switcher ua">UA</button>
    		</li>
    	</ul>
    </nav>

    data-lang - это то что нужно переводить
    Сами данные лежат в двух файлах в папке translations
    ru.json
    {
      "about_academy": "Про Академию",
      "proposal": "Что мы предлагаем",
      "your_result": "Что ты получишь",
      "feedback": "Что говорят выпускники",
      "blog": "Блог",
      "contacts": "Контакты",
      "our_mission_main": "Наша миссия"
    }

    ua.json
    {
      "about_academy": "Про Академію",
      "proposal": "Що ми пропонуємо",
      "your_result": "Що ти отримаєш",
      "feedback": "Що кажуть випускники",
      "blog": "Блог",
      "contacts": "Контакти",
      "our_mission_main": "Наша місія"
    }

    JS
    (function($) {
    
    function Translate() { 
    	//initialization
    	this.init =  function(attribute, lng) {
    		this.attribute = attribute;
    		this.lng = lng;
    	};
    	//translate 
    	this.process = function() {
    		var _self = this;
    		var xrhFile = new XMLHttpRequest();
    		//load content data 
    		xrhFile.open("GET", "./translations/"+this.lng+".json", false);
    		xrhFile.onreadystatechange = function () {
    			if(xrhFile.readyState === 4) {
    				if(xrhFile.status === 200 || xrhFile.status == 0) {
    					var LngObject = JSON.parse(xrhFile.responseText);
    					console.log(LngObject["name1"]);
    					var allDom = document.getElementsByTagName("*");
    					for(var i =0; i < allDom.length; i++){
    						var elem = allDom[i];
    						var key = elem.getAttribute(_self.attribute);
    						if(key != null) {
    							console.log(key);
    							elem.innerHTML = LngObject[key];
    						}
    					}
    				}
    			}
    		};
    		xrhFile.send();
    	};
    }
    
    // Change language
    function loadNewLang(new_lang) {
    	var translate = new Translate();
    	var currentLng = new_lang;
    	var attributeName = 'data-lang';
    	translate.init(attributeName, currentLng);
    	translate.process();
    }
    
    loadNewLang('ua');
    
    $('.language-switcher').on('click', function(e) {
    	e.preventDefault();
    	$('.preloader').removeAttr('style');
    	if($(this).hasClass('ru')) {
    		$(this).toggleClass('ru ua').text('UA');
    		loadNewLang('ua');
    		ln_preloader();
    	} else if ($(this).hasClass('ua')) {
    		$(this).toggleClass('ua ru').text('RU');
    		loadNewLang('ru');
    		ln_preloader();
    	}
    });
    
    })(jQuery);

    работает это все из под сервера
    Ответ написан
    5 комментариев
  • Как менять местами блоки, секции WordPress?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    В acf pro есть такая штука как flexible fields, гибкое содержимое. Оно позволяет делать то что вы хотите, насколько мне известно.
    Также в последних версиях появилась возможность создавать блоки для гутенберг, и тогда в самом гутенберг вы можете эти блоки менять местами. Ну а в самих блоках стандартно используете остальные возможности acf
    Ответ написан
    Комментировать
  • Как в WordPress вывести блок "также вас возможно заинтересуют эти товары"?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    На самом деле некоторые вещи не совсем понятно как гуглить, особенно, если сталкиваешься впервые.

    За категорию отвечает шаблон taxonomy-product_cat, который в свою очередь подключает в себя шаблон archive-product. В этом шаблоне есть определенное количество хуков на которые можно подвесить вывод определенных товаров. Например на хук woocommerce_after_shop_loop с приоритетом больше 10, то есть после пагинации.
    В вукоммерсе есть три вида связанных товаров. Апселы, Кросселы и , собственно, Связанные товары. Я пишу сейчас по памяти, могу гдето ошибиться. Кросселы задаются в настройках товара и выводятся в корзине. Апселы задаются тоже в настройках товара и выводятся в карточке товара. Рекомендованные товара берутся на основе категории товара и сами по себе выводятся в карточке товара. Есть плагин, позволяющий выводить вручную.
    Собственно, вывод - все эти товары каким-либо образом связаны с конкретным товаром а не с категорией (кроме релейтед, но он все равно связан с категорией конкретного товара). Поэтому что будет если подвесить стандартные выводы на хук в категории - я не знаю.
    Выглядеть это могло бы както так:

    add_action( 'woocommerce_after_shop_loop', 'your_theme_upsell_display', 15 );
    function your_theme_upsell_display () {
    	if ( is_product_category() ) {
    		woocommerce_upsell_display();
    	}
    }
    
    add_action( 'woocommerce_after_shop_loop', 'your_theme_output_related_products', 20 );
    function your_theme_output_related_products () {
    	if ( is_product_category() ) {
    		woocommerce_output_related_products();
    	}
    }

    Тут сама идея как вывести что-либо на странице категорий.
    Ответ написан
    Комментировать
  • Как вывести поле ACF под заголовком категории?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Вот рабочий код

    function add_custom_field_subcat( $category ) {
    
    	$value = get_field('category_description', 'product_cat_'. $category->term_id);
    
    	echo $value; 
    
    }
    add_action( 'woocommerce_before_subcategory_title', 'add_custom_field_subcat', 15 );
    Ответ написан
  • Как изменить высоту API карты?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Ну вы же сами задали ей минимальную высоту в 720 пикселей. Уменьшайте ее на медиазапросах как вам нужно чтобы на мобилке было
    Ответ написан
  • Почему в WordPress не работает созданный шаблон метки tag.php?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    В общем насколько я понял для кастомных таксономий темплейт tag.php не работает.
    На стаковерфлоу нашел вроде как решение функцией, но у меня не сработало

    function wpse28145_add_custom_types( $query ) {
    	if( is_tag() && $query->is_main_query() ) {
    	// this gets all post types:
    	$post_types = get_post_types();
    	// alternately, you can add just specific post types using this line instead of the above:
    	// $post_types = array( 'post', 'your_custom_type' );
    	$query->set( 'post_type', $post_types );
    	}
    }
    add_filter( 'pre_get_posts', 'wpse28145_add_custom_types' );

    Срабатывают шаблоны вида
    taxonomy.php
    taxonomy-$taxonomy-$term.php
    Ответ написан
    Комментировать
  • Как в advanced custom fields сделать возможность добавления блока?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Если не ACF PRO то как вариант можно сделать кастомный тип записи отзывы и вывести его там где нужно с помощью wp_Query. В файле functions:
    Засунул под спойлер

    // Register Testimonials Post Type
    function testimonials_post_type() {
    
    	$labels = array(
    		'name'                  => _x( 'Testimonials', 'Post Type General Name', 'youth-worker' ),
    		'singular_name'         => _x( 'Testimonial', 'Post Type Singular Name', 'youth-worker' ),
    		'menu_name'             => __( 'Testimonials', 'youth-worker' ),
    		'name_admin_bar'        => __( 'Testimonials', 'youth-worker' ),
    		'archives'              => __( 'Testimonial Archives', 'youth-worker' ),
    		'attributes'            => __( 'Testimonial Attributes', 'youth-worker' ),
    		'parent_item_colon'     => __( 'Parent Item:', 'youth-worker' ),
    		'all_items'             => __( 'All Testimonials', 'youth-worker' ),
    		'add_new_item'          => __( 'Add New Testimonial', 'youth-worker' ),
    		'add_new'               => __( 'Add New', 'youth-worker' ),
    		'new_item'              => __( 'New Testimonial', 'youth-worker' ),
    		'edit_item'             => __( 'Edit Testimonial', 'youth-worker' ),
    		'update_item'           => __( 'Update Testimonial', 'youth-worker' ),
    		'view_item'             => __( 'View Testimonial', 'youth-worker' ),
    		'view_items'            => __( 'View Testimonials', 'youth-worker' ),
    		'search_items'          => __( 'Search Testimonial', 'youth-worker' ),
    		'not_found'             => __( 'Not found', 'youth-worker' ),
    		'not_found_in_trash'    => __( 'Not found in Trash', 'youth-worker' ),
    		'featured_image'        => __( 'Featured Image', 'youth-worker' ),
    		'set_featured_image'    => __( 'Set featured image', 'youth-worker' ),
    		'remove_featured_image' => __( 'Remove featured image', 'youth-worker' ),
    		'use_featured_image'    => __( 'Use as featured image', 'youth-worker' ),
    		'insert_into_item'      => __( 'Insert into item', 'youth-worker' ),
    		'uploaded_to_this_item' => __( 'Uploaded to this item', 'youth-worker' ),
    		'items_list'            => __( 'Testimonials list', 'youth-worker' ),
    		'items_list_navigation' => __( 'Testimonials list navigation', 'youth-worker' ),
    		'filter_items_list'     => __( 'Filter Testimonials list', 'youth-worker' ),
    	);
    	$args = array(
    		'label'                 => __( 'Testimonial', 'youth-worker' ),
    		'description'           => __( 'Post Type for testimonials', 'youth-worker' ),
    		'labels'                => $labels,
    		'supports'              => array( 'title', 'editor', 'thumbnail', 'custom-fields', 'page-attributes', 'post-formats' ),
    		'hierarchical'          => false,
    		'public'                => true,
    		'show_ui'               => true,
    		'show_in_menu'          => true,
    		'menu_position'         => 30,
    		'menu_icon'             => 'dashicons-format-status',
    		'show_in_admin_bar'     => true,
    		'show_in_nav_menus'     => true,
    		'can_export'            => true,
    		'has_archive'           => true,
    		'exclude_from_search'   => false,
    		'publicly_queryable'    => true,
    		'capability_type'       => 'post',
    	);
    	register_post_type( 'testimonials', $args );
    
    }
    add_action( 'init', 'testimonials_post_type', 0 );



    на странице, где надо вывести:

    $testimonials = new WP_Query(array(
    	'post_type'      => 'testimonials',
    	'orderby'        => 'date',
    	'order'          => 'DESC',
    ));
    
    <?php if ( $testimonials->have_posts() ) : ?>
    
    	<?php while ( $testimonials->have_posts() ) : $testimonials->the_post(); ?>
    
    		<div class="testimonial-item">
    			blabla
    		</div>
    
    		<?php endif; ?>
    
    	<?php endwhile;?>
    
    <?php endif; wp_reset_postdata(); ?>
    Ответ написан
    2 комментария