Ответы пользователя по тегу WordPress
  • Как в 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 );
    Ответ написан
  • Почему в 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 комментария
  • Как из H1 убрать подстановку слова например: категория?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    // Удаляет "Рубрика: ", "Метка: " и т.д. из заголовка архива
    add_filter( 'get_the_archive_title', function( $title ){
    	return preg_replace('~^[^:]+: ~', '', $title );
    });

    а в тайтле смотрите в сторону SEO плагина, Yoast seo по умолчанию такое добавляет
    Ответ написан
  • Подключить скрипт перед jquery в WP?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    function mytheme_scripts() {
    
    	wp_deregister_script( 'jquery' );
    	wp_register_script( 'jquery', get_template_directory_uri() . '/js/jquery-1.11.2.min.js', array('custom-js'), null, true );
    	wp_enqueue_script( 'jquery');
    
    	wp_enqueue_script( 'custom-js', get_template_directory_uri() . '/assets/js/common.js', array(), null, true );
    }
    add_action( 'wp_enqueue_scripts', 'mytheme_scripts' );
    Ответ написан
    Комментировать
  • Почему выводится максимум 10 кастомных постов?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    При создании запросов WP_Query может получать предустановленные параметры, которые нужно учитывать. Например, запрос $query = new WP_Query( 'post_type=func' ); может вернуть только первые 10 записей типа func, а не все, как ожидается. Потому что предустановленный параметр posts_per_page=10, ограничивает количество получаемых записей до 10.
    Ответ написан
    9 комментариев
  • Как вставить кнопку в хедер?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    У вас это место, тобишь контакты, выводится из админки Внешний вид > Меню, с помошью одного из меню, если их там несколько. Нужно найти его и добавить в меню пункт меню Произвольная ссылка или прямо выбрать до конкретной страницы, например, обратной связи. Название пишете Оставить заявку, ссылка или существующая, если добавили страницу или вручную куда надо. Также там можно добавить класс. Если такого пункта нет, то вверху страницы найдите кнопку Настройка экрана, там поставить галочку про класс. Класс задается тегу LI, которым обернута ваша ссылка. По классу можете стилизовать кнопку как вам угодно
    Ответ написан
    Комментировать
  • Как изменить настройку адаптивности в WPBakery WordPress?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Я тоже долго не мог понять.
    Собственно сюда как раз и берется значение из настроек ширины, которое сверху над адаптивностью.
    Допустим, нужно чтобы тут было тоже 6 колонок, тогда в настройках ширины так и пишете 6 колонок. А на планшете и десктопе выставляете как вам нужно, 4, например как стоит. Ну и у него идет сетка mobile-first, тоесть там где десктоп это значение и будет для любой ширины экрана больше чем десктоп
    Ответ написан
    1 комментарий
  • Почему ломается верстка и не выводятся посты из категорий?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    1. UPD. правильный комментарий ниже о неправильном закрытии тегов, в цикле
    2. Не знаю, насколько правильно, но я похожую задачу решал, запустив еще один цикл с теми же параметрами
    Ответ написан
  • Как посадить несколько страниц на один wordpress сайт?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Попробую подсказать.
    В первую очередь надо почитать кодекс вордпресс и создание тем, ознакомится с иерархией шаблонов.
    Вам понадобятся разные шаблоны для ваших страниц, желательно кастомный тип записей для рецепта и свой шаблон для него. Страница для вывода в цикле этих ваших рецептов. Можно обойтись без кастомного типа записи и использовать обычные записи и их выводить на обычной странице вывода записей. Например archive.php если не хотите использовать индекс
    Ответ написан
    1 комментарий
  • Как обернуть картинки карточки товаров в ссылку на этот товар?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    У вас тема и в ней придется скорее всего поковыряться, чтобы найти нужные функции.

    На скриншоте явно что-то не то
    5ef8d628e37ce884941428.png

    стандартно в woocommerce открывающий тег ссылки висит на хуке
    do_action( 'woocommerce_before_shop_loop_item' );
    на 10м приоритете и выводится функцией
    woocommerce_template_loop_product_link_open()
    код этой функции
    if ( ! function_exists( 'woocommerce_template_loop_product_link_open' ) ) {
    	/**
    	 * Insert the opening anchor tag for products in the loop.
    	 */
    	function woocommerce_template_loop_product_link_open() {
    		global $product;
    
    		$link = apply_filters( 'woocommerce_loop_product_link', get_the_permalink(), $product );
    
    		echo '<a href="' . esc_url( $link ) . '" class="woocommerce-LoopProduct-link woocommerce-loop-product__link">';
    	}
    }

    замена открывающего тега в стандартном woocommerce могла бы выглядеть как-то так:
    remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
    add_action( 'woocommerce_before_shop_loop_item', 'custom_open_link', 10 );
    function custom_open_link() {
    	?>
    		<a href="<?php the_permalink() ?>">
    	<?php
    }
    Ответ написан
  • Что можно удалять и править в шаблоне Underscores для WordPress?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Если вы сгенерировали себе для посадки вёрстки шаблон underscores, то можете делать с ним все что угодно. Underscores включает в себя лучшие практики и много полезного, и прежде чем удалять функции из function.php посмотрите, скорее всего она вам понадобится или может использоваться как образец. Те же меню, сайдбары и прочее. Многое можно удалить, так как вы это уже сверстали, например навигацию и её файлы, rtl, возможно вам не понадобится инфинити скролл, дополнительные настройки в кастомайзер итд.
    Разметка страниц скорее всего не подойдёт, но обращайте внимание на циклы, специальные функции, особенно в шапке.
    Если это тема ваша и обновляется не будет, то дочернюю тему вы не делаете, её уже будет делать кто-то, кто возможно после вас будет кастомизировать.
    Как альтернатива в репозитории WordPress есть ещё пустые шаблоны, которые можно использовать как отправную точку
    Ответ написан
  • Как вывести the_excerpt очищенный от html тегов?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Попробуйте кастомную функцию с дополнительными опциями
    https://wp-kama.ru/id_31/obrezka-teksta-zamenyaem-...
    Ответ написан
    Комментировать
  • Как в ACF дать возможность пользователю добавить готовую группу полей?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    В ACF Pro это называется Repeater field
    В бесплатной версии этот функционал отсутствует

    Как вариант создайте кастомный тип записей Дело и к нему привяжите необходимые поля. Ну а записи естественно выводятся в цикле. Заодно при нажатии опсмотреть Дело будет открываться шаблон, специально созданый вами для типа записи Дело
    Ответ написан
    Комментировать
  • Как реализовать кнопки Share на WordpRess?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Можно плагином.
    Можно вручную, ищите реализацию ссылки для пошарить для того или иного сервиса и вставляете
    Вот пример, это код со страницы single:
    <div class="single-share">
    	<a href="https://www.facebook.com/sharer.php?u=<?php the_permalink(); ?>" target="_blank">
    		<?php __('Поделиться в Facebook') ?>
    	</a>
    	<a href="https://twitter.com/home?status=<?php the_permalink(); ?>" target="_blank">
    		<?php __('Поделиться в Twitter') ?>
    	</a>
    	<a href="https://telegram.me/share/url?url=<?php the_permalink(); ?>&text=<?php the_title() ?>" target="_blank">
    		<?php __('Поделиться в Telegram') ?>
    	</a>
    </div>
    Ответ написан
    1 комментарий
  • Как реализовывается пагинация?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Пагинацию вы будете реализовать на WP. Скорее всего оформляя стилями то решение, которое будете использовать.
    Ответ написан
    Комментировать
  • Вопрос как написать условие, чтобы на странице shop выводил просто слово "товары", а на других название категории?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    // Удаляет "Рубрика: ", "Метка: " и т.д. из заголовка архива
    add_filter( 'get_the_archive_title', function( $title ){
    	return preg_replace('~^[^:]+: ~', '', $title );
    });
    Ответ написан
    Комментировать
  • Как в wordpress реализавать список постов табами?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    <div class="wrapper">
    
      <div class="tabs">
    
        <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    
          <div class="tab"><?php the_title() ?></div>
    
        <?php endwhile; ?>
    
      <?php endif; ?>
    
      </div><!-- tabs -->
    
      <div class="tab-content">
    
      <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    
        <div class="tab-item">
          <?php the_excerpt() ?>
          <a href="<?php the_permalink() ?>">Читать далее</a>
        </div>
    
      <?php endwhile; ?>
    
      </div><!-- tab-content -->
    
      <?php endif; ?>
    
    </div><!-- wrapper -->
    
    <script>
      $('.tab-item').not(':first').hide();
      $('.wrapper .tab').on('click', function() {
        $('.wrapper .tab').removeClass('active').eq($(this).index()).addClass('active');
        $('.tab-item').hide().eq($(this).index()).fadeIn();
      }).eq(0).addClass('active');
    </script>
    Ответ написан