Ответы пользователя по тегу WordPress
  • Нет возможности выбрать рубрику при создании страницы - как устроить?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Код, позволяющий добавить категории и теги к страницам
    function add_taxonomies_to_pages() {
     register_taxonomy_for_object_type( 'post_tag', 'page' );
     register_taxonomy_for_object_type( 'category', 'page' );
     }
    add_action( 'init', 'add_taxonomies_to_pages' );
     if ( ! is_admin() ) {
     add_action( 'pre_get_posts', 'category_and_tag_archives' );
     
     }
    function category_and_tag_archives( $wp_query ) {
    $my_post_array = array('post','page');
     
     if ( $wp_query->get( 'category_name' ) || $wp_query->get( 'cat' ) )
     $wp_query->set( 'post_type', $my_post_array );
     
     if ( $wp_query->get( 'tag' ) )
     $wp_query->set( 'post_type', $my_post_array );
    }
    Ответ написан
    2 комментария
  • Как вывести название категории товара?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Уберете лишнее под себя
    add_action( 'woocommerce_after_shop_loop_item_title', 'custom_show_product_cat', 7 );
    
    function custom_show_product_cat() {
    	global $product;
    		echo wc_get_product_category_list( $product->get_id(), ', ', '<div class="product-cat">' . _n( 'Category:', 'Categories:', count( $product->get_category_ids() ), 'woocommerce' ) . ' ', '</div>' ); 
    }
    Ответ написан
    Комментировать
  • Как в wp сделать кастомный фон для определенной секции?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    вот по кастомайзеру, но я все таки склоняюсь к тому что кастомайзер для глобальных настроек а не для настроек конкретной секции конкретной страницы.
    https://wp-kama.ru/handbook/theme/customize-api
    https://codex.wordpress.org/Theme_Customization_API
    https://misha.agency/course/nastrojki-temy-wordpress
    Я не представляю себе работу с вп без произвольных полей в принципе, поэтому даже настройки делаю через них а не через кастомайзер.
    Опять же, на чем делается секция? гутенберг умеет в бекграунд, все билдеры умеют тоже.
    Ответ написан
    Комментировать
  • Почему Wordpress такой корявый?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Aljo, Не нужно бороться с редактором. Подходов существует множество, все зависит от того, что ты умеешь, чему не прочь научиться, а что делать не планируешь.
    Возьмем как базовый пример например лендинг из 5ти блоков. В одном из блоков слайдер с последними записями блога. В футере и хедере есть номера телефонов и ссылки на соцсети.
    Уже если подумать просто редактора недостаточно, чтобы вывести из админки номера телефонов и соцсети.
    Может быть несколько подходов. Самый простой - использовать плагин для метаполей, я пользую ACF Pro. С помощью него можно сделать страницу настроек и из нее получать номера телефона и социалки и выводить в хедере с футером. Также это можно сделать через API кастомайзера. Это встроенная система настроек. это уже чуть сложнее, но тоже ничего сверхъестественного. Третьим вариантом вижу виджеты. Регистрируем сайдбары где нужно и из виджетов выводим прямо верстку.
    Перейдем к телу лендинга.
    Самый простой способ это если есть готовая верстка создать шаблон страницы для этого лендинга и вкинуть в нее всю верстку. Можно разбить на отдельные файлики для удобства. Контент выводить через те же метаполя.
    Можно поставить конструктор страниц и сделать на нем. Можно попробовать сверстать на встроенном гутенберге, но так как он довольно уныл из коробки нужно будет поставить пару плагинов, расширяющих его возможности.
    Далее как вариант можно делать свои кастомные блоки для гутенберга из готовой верстки.
    Вспоминаем что нам нужно в один из блоков вывести слайдер с последними записями. Тут не обойтись без знаний работы с циклами вордпресс и дальше снова либо код прямо в теле ленда, либо выносим в функцию, либо делаем блок для гутенберга либо смотрим умеет ли установленный нами редактор делать такие штуки.
    И чем глубже, тем интереснее. Кастомные типы записей и таксономий, интеграция сложного меню с помощью класса wp_walker, создание шорткодов и виджетов, плагинов в конце концов. Кароч, желаю удачи
    Ответ написан
    1 комментарий
  • Как в теге title убрать слово Архив?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    вот еще вариант для разнообразия, но первый и мне нравится больше
    function x_theme__remove_name_cat( $title ){
    	if ( is_category() ) {
    		$title = single_cat_title( '', false );
    	} elseif ( is_tag() ) {
    		$title = single_tag_title( '', false );
    	}
    	return $title;
    }
    add_filter( 'get_the_archive_title', 'x_theme__remove_name_cat' );
    Ответ написан
    2 комментария
  • Как создать в категории woocommerce acf с выводом текста?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Добавляем поле
    60d34b731ec81022538993.jpeg

    Вводим значение
    60d34b8cc0308915797452.jpeg

    Выводим в шаблоне
    $term = get_queried_object();
    
    $test_title = get_field('test_title', $term);
    
    echo $test_title;


    Профит
    60d34bcf78c64945878639.jpeg
    Ответ написан
  • Как выводить в категориях подкатегория в woocommerce?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    function description_after_subcategory( $category ) {
    	echo '<div class="cat-short-descr">' . $category->description . '</div>';
    }
    add_action( 'woocommerce_after_subcategory', 'description_after_subcategory' );

    60d09f6c023ac995881227.jpeg
    Ответ написан
  • Почему не срабатывают функции в файле functions.php в дочерней теме?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    add_action( 'init', 'remove_my_action');
    function remove_my_action() {
         remove_action( 'woocommerce_before_shop_loop','storefront_sorting_wrapper',9 );
    }
    Ответ написан
    1 комментарий
  • Как сделать форму "предложить новость"?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Я уже писал, но вы не читаете. Плагины для постинга типа wp user frontend, либо у acf есть такая штука как acf_form(). И быть готовым к тому что полностью в дизайн скорее всего не попасть
    Ответ написан
    Комментировать
  • Как правильно редактировать файлы WP(стили, скрипты, статику)?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Первое, что нужно сделать если тема не ваша это создать и активировать дочернюю тему.
    https://wp-kama.ru/id_6235/dochernie-temy-wordpres...
    Она состоит из файла стилей, и файла функций. Единственный обязательный это файл стилей. Он перезаписывает основной файл, поэтому стили базовой темы нужно либо заинклюдить в него либо подключить в файле функций, что более правильно. Файл функций дополняет основной файл функций и запускается раньше.
    Кастомные стили оптимально писать в дочернем файле стилей. Если стиль не сработал, смотрим в отладчике применился ли он вообще, возможно ему просто не хватает веса селектора чтобы перебить, тогда усиливаем селектор.
    В дочерней теме можно переопределить любые шаблоны разметки. Если нужно изменить хедер, копируем по тому же пути файл хедера в дочернюю тему и там уже правим.
    Некоторые функции тоже можно переопределить, только если автор функции в базовой теме завернул её в специальную конструкцию проверки
    Ответ написан
    Комментировать
  • Редактирование CSS кода в WP?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    В элементоре практически каждому блоку можно назначить свой класс. Посмотреть к какому именно блоку применился класс можно в инспекторе. Да и в целом можно назначить родительский класс, а потом в инспекторе смотреть классы вложенных блоков и наследуясь от базового назначенного оформлять вложенные
    Ответ написан
    2 комментария
  • Вывод категорий с постами?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Вроде помогло, оформлю в ответ, мошт ещё кому поможет
    $terms_array = array( 
      'taxonomy' => 'services', // you can change it according to your taxonomy
      'parent'   => 0 // If parent => 0 is passed, only top-level terms will be returned
    );
    $services_terms = get_terms($terms_array); 
    foreach($services_terms as $service): ?>
    <h4><?php echo $service->name; ?></h4>
    <?php 
    $post_args = array(
          'posts_per_page' => -1,
          'post_type' => 'service', // you can change it according to your custom post type
          'tax_query' => array(
              array(
                  'taxonomy' => 'services', // you can change it according to your taxonomy
                  'field' => 'term_id', // this can be 'term_id', 'slug' & 'name'
                  'terms' => $service->term_id,
              )
          )
    );
    $myposts = get_posts($post_args); ?>
    <ul>
    <?php foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
      <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
      </li>
    <?php endforeach; // Term Post foreach ?>
    </ul>
    <?php wp_reset_postdata(); ?>
    
    <?php endforeach; // End Term foreach; ?>
    Ответ написан
    4 комментария
  • Как изменить повторяющийся блок в WordPress через админку?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Для ACF Pro.
    Первый вариант. Для конкретного этого блока можно завести поля на странице опций, опции сквозные и могут выводится везде на сайте.
    Второй вариант. Вывести в админке эти поля для какойто конкретной страницы, например для главной, если они есть, а в вашем шаблоне получать значения, передавая id ( get_fiead('some_field', $home_page_id) ), этот вариант интереснее тем, что клиенту не нужно помнить где спрятаны эти поля.
    Третий. смотря что это за поля, но например если это секция с отзывами, то бишь с сущностями, которые могут претендовать на отдельный тип записи, то можно собственно создать отдельный тип записи и выводить его стандартно циклом.
    Четвертый, похожий на третий, но тут мы создаем страницу опций ACF которую называем Отзывы, и в ней будут только эти поля.

    Предложили использовать Кастомайзер, вижу. Я пожалуй не использовал бы кастомайзер для вывода контента, опять же если есть ACF Pro, то я обычно даже для настроек базовых не использую кастомайзер, для того чтобы не дробить места расположения настроек.

    Можно придумать еще горку способов, например выводить через виджеты, но по мне вывод виджетов скорее подходит для хедеров, футеров и сайдбаров, а не для контентной части.
    Ответ написан
    7 комментариев
  • Как вывести посты с учетом дополнительного поля?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    $newsLoop = new WP_Query(array(
    	'posts_per_page' => 10,
    	'post_type'      => 'post',
    	'orderby'        => 'date',
    	'order'          => 'DESC',
    	'meta_query'     => array(
    		array(
    			'key'     => 'post_delete',
    			'value'   => '0',
    			'compare' => 'LIKE',
    		)
    	),
    ));
    
    
    if ( $newsLoop->have_posts() ) : ?>
    
    	<div class="news-wrapper">
    
    		<?php while ( $newsLoop->have_posts() ) : $newsLoop->the_post();
    			$post_delete = get_post_meta( $post->ID, 'post_delete' );
    		?>
    
    		<?php if ( !$post_delete ): ?>
    			<?php get_template_part( 'template-parts/loop', get_post_format() ? : 'video' ); ?>
    		<?php endif ?>
    
    		<?php endwhile;?>
    
    	</div>
    
    <?php endif; wp_reset_query(); ?>
    Ответ написан
    1 комментарий
  • Как создать пагинацию?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    <?php
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    $args = array(
         'post_type' => 'custom_post_type_name',
         'posts_per_page' => 10,
         'paged' => $paged
    );
    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
         // CPT content
    endwhile;
    ?>
    <div class="pagination">
         <?php
         $big = 999999999;
         echo paginate_links( array(
              'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
              'format' => '?paged=%#%',
              'current' => max( 1, get_query_var('paged') ),
              'total' => $loop->max_num_pages,
              'prev_text' => '&laquo;',
              'next_text' => '&raquo;'
         ) );
    ?>
    </div>
    <?php wp_reset_postdata(); ?>
    Ответ написан
    Комментировать
  • Как запретить создание записи в CPT Wordpress?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    'capabilities' => array(
      'create_posts' => 'do_not_allow'
    ),
    'map_meta_cap' => true,
    Ответ написан
    3 комментария
  • Как сделать, чтобы при добавлении в корзину товара страница не перезагружалась?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Нагуглил вам рабочий код с аяксом
    /**
     * Add quantity field on the shop page.
     */
    function ace_shop_page_add_quantity_field() {
    
    	/** @var WC_Product $product */
    	$product = wc_get_product( get_the_ID() );
    
    	if ( ! $product->is_sold_individually() && 'variable' != $product->get_type() && $product->is_purchasable() ) {
    		woocommerce_quantity_input( array( 'min_value' => 1, 'max_value' => $product->backorders_allowed() ? '' : $product->get_stock_quantity() ) );
    	}
    
    }
    add_action( 'woocommerce_after_shop_loop_item', 'ace_shop_page_add_quantity_field', 12 );
    
    
    /**
     * Add required JavaScript.
     */
    function ace_shop_page_quantity_add_to_cart_handler() {
    
    	wc_enqueue_js( '
    		$(".woocommerce .products").on("click", ".quantity input", function() {
    			return false;
    		});
    		$(".woocommerce .products").on("change input", ".quantity .qty", function() {
    			var add_to_cart_button = $(this).parents( ".product" ).find(".add_to_cart_button");
    			// For AJAX add-to-cart actions
    			add_to_cart_button.attr("data-quantity", $(this).val());
    			// For non-AJAX add-to-cart actions
    			add_to_cart_button.attr("href", "?add-to-cart=" + add_to_cart_button.attr("data-product_id") + "&quantity=" + $(this).val());
    		});
    		// Trigger on Enter press
    		$(".woocommerce .products").on("keypress", ".quantity .qty", function(e) {
    			if ((e.which||e.keyCode) === 13) {
    				$( this ).parents(".product").find(".add_to_cart_button").trigger("click");
    			}
    		});
    	' );
    
    }
    add_action( 'init', 'ace_shop_page_quantity_add_to_cart_handler' );
    Ответ написан
    Комментировать
  • Как клиенту дать возможность редактировать контент wordpress?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Даже из коробки вордпресс уже оснащен подобием билдера - гутенберг. При интеграции вы должны были как минимум подготовить стандартные шаблоны для записей и страниц, в которые функцией the_content() выводится все из редактора, будь то классический или гутенберг.
    Произвольные поля позволяют редактировать контент расположеный в уже готовых сверстанных блоках, положение которых на странице можно изменить используя flexible content или кастомные блоки для гутенберга.
    Итак, если для страницы уникальная верстка и нужно разрешить редактирование только самого контента, то можно обойтись ACF. Если чуть по разнообразнее то с помощью него же использовать Flexible content. Также ACF поможет создавать блоки для гутенберга. это все про ПРО версию.
    Далее билдеры. кроме встроенных блоков, для любого билдера можно создавать кастомные шорткоды (виджеты), как указано в вопросе. Но это дело часто непростое, хотя есть варианты упрощения.
    Я чаще всего использую просто кастомные поля и кастомные типы записей, реже флексибл контент и блоки для гутенберга. Был опыт создания виджетов для Page builder by Site origin - долго и муторно. Также делал для visual composer, но в качестве настроек юзал acf
    Ответ написан
    2 комментария
  • Как в Woocommerce вывести доп.информацию о категории при наведении?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Не уверен, что выйдет через стандартное меню. Даже не знаю, можно ли подобный волкер написать. Хотя можно и попробовать. Я вижу пару вариантов.
    Плагины типа мега-меню это первый.
    Второй это вывести рядом с меню скрытые блоки, в которые вытащить описания категорий с картинками, скрыть их. К нужным пунктам меню добавить классы, от которых плясать открытие блоков с описанием.

    <?php 
    
    $prod_cat_args = array(
    	'taxonomy'    => 'product_cat',
    	'hide_empty'  => false,
    	'parent'      => 0 
    );
    
    $woo_categories = get_categories( $prod_cat_args );
    
    ?>
    
    <?php foreach ( $woo_categories as $woo_cat ) : 
    	$woo_cat_id = $woo_cat->term_id;
    	$woo_cat_name = $woo_cat->name;
    	$woo_cat_slug = $woo_cat->slug;
    	$woo_cat_descr = $woo_cat->description;
    	$category_thumbnail_id = get_term_meta($woo_cat_id, 'thumbnail_id', true);
    	$thumbnail_image_url = wp_get_attachment_url($category_thumbnail_id);
    	$cat_link = get_term_link( $woo_cat_id, 'product_cat' );
    	?>
    	<div class="product-cat-item">
    		<a href="<?php echo $cat_link ?>"><?php echo $woo_cat_name ?></a>
    		<?php if ($thumbnail_image_url) : ?>
    			<img src="<?php echo $thumbnail_image_url ?>" alt="<?php echo $woo_cat_name ?>">
    		<?php endif; ?>
    		<p><?php echo $woo_cat_descr ?></p>
    	</div>
    
    <?php endforeach; ?>
    Ответ написан
    6 комментариев