Ответы пользователя по тегу WordPress
  • Wordpress Woocommerce: создание своего виджета корзины?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Виджет корзины лежит в plugins/woocommerce/templates/cart/minicart.php . Копируете себе в тему и можете изменять. В шаблоне вызывается функцией woocommerce_mini_cart();
    Так же для работы с корзиной есть класс WC_Cart
    Например получить количество товаров в корзине
    echo WC()->cart->get_cart_contents_count();
    Полный список методов здесь https://docs.woocommerce.com/wc-apidocs/class-WC_C...
    Ответ написан
    1 комментарий
  • Натяжка верстки на Wordpress и перенос сайта на WP?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Можно посмотреть вот это
    https://www.youtube.com/watch?v=iMzq63_-sXI&list=P...
    Вот неплохой цикл
    https://www.youtube.com/watch?v=oqYhOkQfdeA&list=P...
    Обязательно изучите структуру и иерархию шаблонов, осознайте, что WordPress не использует MVC, изучите работу встроенного цикла WP и написание своего WP_Query. Выясните, что такое таксономии, и пользовательские типы постов, так же какие есть встроенные.
    Документация на кодексе https://codex.wordpress.org
    Русскоязычная документация wp-kama.ru
    Здесь можно скачать болванку для темы underscores.me
    Ответ написан
    Комментировать
  • Как работать с роутингом в WP?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Чтобы для статической страницы создать отдельный шаблон нужно создать файл название.php и в самом верху добавить комментарий
    <?php
    /**
     * Template Name: Название шаблона
     */

    И при создании страницы в админке выбрать нужный шаблон.
    Про WP_Rewrite не подскажу, я использовал add_rewrite_rule(); почитать можно здесь
    Вот, например я добавлял параметр str для сортировки по алфавиту для страницы /avtori/
    add_action('init', 'do_rewrite');
    function do_rewrite(){
    
        add_rewrite_rule( '^avtori/([^/]*)/([^/]*)/?', 'srt=$matches[1]', 'top' );
    
        add_filter( 'query_vars', function( $vars ){
            $vars[] = 'srt';
            return $vars;
        } );
    }

    Этот код из урла вида /avtori/?srt=А достает значение параметра srt и записывает его в переменные запроса (параметры запроса) из WP_Query. После этого в коде страницы, на которую вы перешли можно получить это значение
    $my_var = get_query_var('srt');
    И потом эту переменную использовать, например, при построении своего WP_Query или где угодно на странице
    Надеюсь, я правильно понял вопрос)
    По плагинам тож не подскажу.
    Ответ написан
    2 комментария
  • Добавить в миниатюры постов кнопки "поделиться" в Вордпресс?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    <?php get_template_part( 'format', get_post_format() ); ?>
    Ищите в папке с темой файлы format-post_format.php и там, рядом с the_post_thumbnail() вставьте блок с кнопками, потом стилями его отпозиционируйте. Если тема куплена или скачана, то создайте дочернюю тему и все изменения делайте в ней.
    Ответ написан
  • Как добавить класс ко всем спискам в статье в wordpress?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Так пропишите стили для списков .entry-content ul , потом отдельно для списков плагина .entry-content ul.plugin, уверен, плагины вставляют классы, за которые вы сможете зацепиться
    Ответ написан
  • Как создать блок последних записей в произвольном типе записей?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Вот здесь вывод бутсроповских табов с названиями Терминов из кастомной таксономии, а потом с постами из них, кастомизируйте как вам надо
    <ul class="nav nav-tabs" role="tablist">
                                    <li role="presentation" class="active"><a href="#projects" aria-controls="projects" role="tab" data-toggle="tab">Все проекты</a></li>
    
    
                                    <?php
                                    $args = array(
                                        'taxonomy' => 'afisha_kat', 
                                        'hide_empty' => true,
                                    );
                                    $terms = get_terms( $args );
                                    foreach ($terms as $term) { ?>
                                        <li role="presentation"><a href="#<?php echo $term->slug;?>" aria-controls="<?php echo $term->slug;?>" role="tab" data-toggle="tab"><?php echo $term->name; ?></a></li>
                                    <?php }?>
                                </ul>
                            <div class="tab-content">
                                <div role="tabpanel" class="tab-pane active" id="projects">
                                    <?php
                                    $args = array(
                                        'post_type' => 'afisha', 
                                        'posts_per_page' => 8,
                                    );
                                    $query = new WP_Query( $args );
                                    if ( $query->have_posts() ) : ?>
                                                <?php while ( $query->have_posts() ) : $query->the_post(); ?>
                                                        <a href="<?php the_permalink();?>">
                                                            <figure class="project-thumb">
                                                                <?php the_post_thumbnail()?>
                                                            </figure>
                                                            <p class="project-descr">
                                                                <?php the_title();?>
                                                            </p>
                                                        </a>
                                                <?php endwhile; ?>
                                        </div>
                                    <?php
                                    endif; wp_reset_postdata(); ?>
                                </div>
                                <?php
                                $args = array(
                                    'taxonomy' => 'afisha_kat',
                                    'hide_empty' => true,
                                );
                                $terms = get_terms( $args );
                                foreach ($terms as $term) { ?>
                                    <div role="tabpanel" class="tab-pane" id="<?php echo $term->slug;?>">
                                        <div class="projects-grid">
                                            <ul class="project-tabs-items">
                                                <?php
                                                $args = array(
                                                    'post_type' => 'afisha',
                                                    'posts_per_page' => 3,
                                                    'tax_query' => array(
                                                        array(
                                                            'taxonomy' => 'afisha_kat', 
                                                            'field'    => 'slug',
                                                            'terms'    => $term->slug,
                                                        )
                                                    )
                                                );
                                                $query = new WP_Query( $args );
                                                if ( $query->have_posts() ) : ?>
                                                    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
                                                        <li>
                                                            <a href="<?php the_permalink();?>">
                                                                <figure class="project-thumb">
                                                                    <?php the_post_thumbnail('project-thumb')?>
                                                                </figure>
                                                                <p class="project-descr">
                                                                    <?php the_title();?>
                                                                </p>
                                                            </a>
                                                        </li>
                                                    <?php endwhile; ?>
                                                <?php
                                                endif; wp_reset_postdata(); ?>
                                            </ul>
                                        </div>
                                    </div>
                                <?php } ?>
                            </div>

    В первой табе выводятся 8 последних постов из всех терминов таксономии, в последующих - по 3 из каждой.
    Ответ написан
  • Как реализовать похожие товары woocommerce для постов блога с похожими тегами?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Вот этот код выведет до 5-ти продуктов, теги которых, совпадают с каким-либо тегом поста. Имена тегов должны быть полностью идентичными
    <?php global $post;
                $post_tags = get_the_tags($post->ID);
                $tag_query = array();
                $i=0;
                foreach ($post_tags as $tag) {
                    $tag_query[i] = $tag->name;
                    $i++;
                }
                $args = array (
                    'post_type' => 'product',
                    'posts_per_page' => 5,
                    'tax_query' => array(
                        array(
                            'taxonomy' => 'product_tag',
                            'field'    => 'name',
                            'terms'    => $tag_query,
                        )
                    )
                );
                $products = new WP_Query($args);
                if ( $products->have_posts() ) :
                while ( $products->have_posts() ) : $products->the_post();
                //здесь выводим продукты в нужной разметке
                endwhile;
                endif; wp_reset_postdata();
                ?>
    Ответ написан
    Комментировать
  • Как сделать вывод записей своей таксономии на одной странице в WP?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Вы создали пользовательскую таксономию для пользовательского типа поста? Если так, то в запросе нужно использовать массив tax_query wp-kama.ru/function/wp_query#parametry-taksonomij
    Это если вы хотите написать свой луп в произвольно месте.. Если же вас интересует просто страница архива нужной таксономии, создайте taxonomy.php и вставьте туда обычный луп без аргументов
    <?php if (have_posts()) : ?>
      <?php while (have_posts()) : the_post(); ?> 
      //Код внутри цикла
      <?php endwhile; ?>
    <?php endif; ?>
    Ответ написан
  • Как найти используемый шаблон Wordpress?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Комментировать
  • Отключить блок в определенной категории woo?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Так в чем вопрос? У вас же там есть проверка. Если поле непустое то выводим, если пустое, то не выводим. Не заполняйте поле в ненужных товарах и все. И проверку if($zavarka=get_field("zavarka"))
    Напишите просто ДО вывода блока и тогда даже разметка не будет выводиться

    <?php if(get_field("zavarka")) { ?>
    <div class= "sposob_varki">
    <div class= "sposob_varki1"><h3><center>СПОСОБ ЗАВАРИВАНИЯ</center></h3></div>
       <?php the_field("zavarka");?>
    </div>
    <?php } ?>

    Если же поле мешает именно в админке, то задайте в ACF условие, чтобы исключить ненужные категории.
    4ff2f06f44d54bbe9236c5e21294ceab.png
    Ответ написан
    1 комментарий
  • Как добавить второй язык на сайт?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    WP Globus точно не подходит? Тогда создайте поддомен en.site.com и сделайте еще один такой же сайт и заполните его на английском. Ну или папку в вашем сайте создайте, чтоб получилось site.com/en, например, и туда тож залейте WP и заполните англоязычным контентом
    Ответ написан
  • Как сделать выпадающее меню для wordpress в 3 ряда?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Для начала в functions.php зарегистрируем меню, например так:
    function register_my_menu() {
      register_nav_menu('header-menu',__( 'Header Menu' ));
    }
    add_action( 'init', 'register_my_menu' );

    После этого идем в админку, Внешний вид -> Меню. Там должно быть создано уже меню Header Menu. Накидываем туда Страницы. записи, рубрики, ссылки в нужной вам иерархии, хоть в 10 уровней
    a01fc28ff6a04bdcb5be2f01231e1baf.png
    Если, вдруг меню не создалось, создайте новое, и назовите его как-нибудь.
    Далее в нужном месте темы пишем, например
    <?php wp_nav_menu(array(
                            'menu' => 'header-menu', //название меню
                            'container' => 'nav', //контейнер
                            'container_class' => 'top-menu', //класс
                        ));?>

    Получите ваше меню. А дальше через css уже стилизуете
    https://codex.wordpress.org/Navigation_Menus
    Ответ написан
    2 комментария
  • Как кастомизировать шаблон Wordpress?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    В вордпрессе для всего на свете есть плагины. Хотите слайдер? Есть плагины для слайдера. Создали сладер, вставили шорткод в нужную запись или вставили в код нужного шаблона. Хотите галерею? Есть плагины для галереи. Хотите сделать на главной странице слайдер из последних 3-4-х записей? Выводите циклом эти записи в нужной разметке для owl carousel или flexslider. Скрипты и стили подключаете самостоятельно.
    Обязательно изучите иерархию шаблонов вордпресс https://codex.wordpress.org/images/1/18/Template_H...
    Изучите работу цикла https://codex.wordpress.org/Цикл_WordPress , и как написать свой собственный цикл. WP_Query, get_posts();
    Изучите, что такое произвольные типы постов, таксономии и произвольные поля. Мастхев - это ACF и CPT UI.
    Ответ написан
    2 комментария
  • Как использовать цикл while ( have_posts() ): the_post() в своём шаблоне?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Если вы находитесь на статической странице, базовый цикл WordPress выведет вам контент данной страницы. Если вы хотите получить посты на статической странице, то нужно писать свой get_posts(); или WP_Query. Или можно попробовать использовать хук pre_get_posts, если вы хотите сохранить "сортировки постов по буквам". Но я не уверен. Можно попробовать так.

    add_action('pre_get_posts','my_function');
    
    function my_function($query){
        if( $query->is_page(Здесь ID нужной страницы) && $query->is_main_query() && ! $query->is_admin()) {
           //здесь переопределяем аргументы, для цикла, например тип поста
          $query->set('post_type', 'post');
    
        }
    }
    Ответ написан
    2 комментария
  • Woocommerce "итоговая цена" вариативного товара?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Вот функция в includes/wc-template-functions.php
    function woocommerce_variable_add_to_cart() {
            global $product;
    
            // Enqueue variation scripts
            wp_enqueue_script( 'wc-add-to-cart-variation' );
    
            // Get Available variations?
            $get_variations = sizeof( $product->get_children() ) <= apply_filters( 'woocommerce_ajax_variation_threshold', 30, $product );
    
            // Load the template
            wc_get_template( 'single-product/add-to-cart/variable.php', array(
                'available_variations' => $get_variations ? $product->get_available_variations() : false,
                'attributes'           => $product->get_variation_attributes(),
                'selected_attributes'  => $product->get_variation_default_attributes()
            ) );

    Подключает она этот шаблон single-product/add-to-cart/variable.php, копируем себе в тема/woocommerce/single-product/add-to-cart/variable.php и меняем разметку, а так же смотрим какие там еще есть хуки
    Ответ написан
    6 комментариев
  • Хлебные крошки (breadcumbs) генерируются 2а раза почему?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Может проще использовать готовое решение? https://ru.wordpress.org/plugins/breadcrumb-navxt/
    Ответ написан
    Комментировать
  • Wordpress woocommerce: полностью кастомный вывод и фильрование товаров?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    В самом шаблоне все уже написано. Вот, например content-single-product.php и интересующий вас экшн.
    <?php
    			/**
    			 * woocommerce_single_product_summary hook.
    			 *
    			 * @hooked woocommerce_template_single_title - 5
    			 * @hooked woocommerce_template_single_rating - 10
    			 * @hooked woocommerce_template_single_price - 10
    			 * @hooked woocommerce_template_single_excerpt - 20
    			 * @hooked woocommerce_template_single_add_to_cart - 30
    			 * @hooked woocommerce_template_single_meta - 40
    			 * @hooked woocommerce_template_single_sharing - 50
    			 */
    			do_action( 'woocommerce_single_product_summary' );
    		?>

    Здесь написаны все хуки из этого экшна. Их можно удалить, можно всунуть свои экшны с функциями. Каждый легко гуглится и вот здесь официальная документация: https://docs.woocommerce.com/wc-apidocs/index.html
    Забиваем в поиск woocommerce_template_single_price и получаем функцию и ссылку на её расположение. Видим
    if ( ! function_exists( 'woocommerce_template_single_price' ) ) {
        /**
         * Output the product price.
         *
         * @subpackage  Product
         */
        function woocommerce_template_single_price() {
            wc_get_template( 'single-product/price.php' );
        }
    }

    Идем по пути видим код нужного шаблона. Так с каждым интересующим. Каждый шаблон можно скопировать в папку своей темы и изменять как угодно, о чем в файле и написано
    This template can be overridden by copying it to yourtheme/woocommerce/single-product/price.php.

    Все поля продукта заполнены как кастомные. Можете к ним обращаться через get_post_meta();
    Чтоб посмотреть все доступные поля, просто дампните результат этой функции без аргументов на странице товара. Но у продукта вуккомерс есть свои методы типа
    $product->get_price(); 
    $product->is_on_sale();
    и т.д. полный список методов здесь
    Ответ написан
    3 комментария
  • Как исключить шаблон кастомной таксономии из запроса woocommerce?

    Palych_tw
    @Palych_tw Автор вопроса
    Типа веб-разработчик
    хук получился такой
    add_action('pre_get_posts','mandrivets_authors');
    
    function mandrivets_authors($query){
            if( $query->is_tax('authors') && $query->is_main_query() && ! $query->is_admin()) {
                $query->set('wc_query', '');
                $query->set('post_type', 'post');
                $query->set('meta_query', '');
            }
    }
    Ответ написан
    Комментировать
  • Как сделать перелистывание страниц wordpress?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    В Wordpress есть замечательные встроенные функции the_posts_navigation() и the_posts_pagination()
    wp-kama.ru/function/the_posts_navigation
    wp-kama.ru/function/the_posts_pagination
    Ответ написан
    Комментировать
  • Как вывести список меток к определенному типу записей?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Метки отдельно врядли. Эта таксономия распространяется на все типы постов. Можно создать отдельную таксономию для каждого типа постов. Другого на ум ничего не приходит

    Если плагин создал тип поста cafe, и к нему прикрутил таксономию, например, cafe_tags со своими терминами, то получить список терминов определенной таксономии можно функцией get_terms(); wp-kama.ru/function/get_terms

    $terms = get_terms("my_taxonomy");
     $count = count($terms);
     if($count > 0){
    	 echo "<ul>";
    	 foreach ($terms as $term) {
    	   echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
    
    	 }
    	 echo "</ul>";
     }


    Вот пример из документации, я добавил, чтобы получились ссылки get_term_link($term).
    Ответ написан
    8 комментариев