Задать вопрос
  • Как вывести изображения категорий товаров?

    wppanda5
    @wppanda5
    WordPress Mедведь
    В отдельный файл сложите поправленный класс
    if ( !class_exists( 'WPP_WC_Product_Cat_List_Walker_With_Thumb' ) ) :
            class WPP_WC_Product_Cat_List_Walker_With_Thumb extends Walker {
    
                public $tree_type = 'product_cat';
    
                public $db_fields = array(
                    'parent' => 'parent',
                    'id'     => 'term_id',
                    'slug'   => 'slug',
                );
    
                public function start_lvl(&$output, $depth = 0, $args = array()) {
                    if ( 'list' != $args[ 'style' ] )
                        return;
                    $indent = str_repeat( "\t", $depth );
                    $output .= "$indent<ul class='children'>\n";
                }
    
                public function end_lvl(&$output, $depth = 0, $args = array()) {
                    if ( 'list' != $args[ 'style' ] )
                        return;
                    $indent = str_repeat( "\t", $depth );
                    $output .= "$indent</ul>\n";
                }
    
                public function start_el(&$output, $cat, $depth = 0, $args = array(), $current_object_id = 0) {
                    $output .= '<li class="cat-item cat-item-' . $cat->term_id;
                    if ( $args[ 'current_category' ] == $cat->term_id ) {
                        $output .= ' current-cat';
                    }
                    if ( $args[ 'has_children' ] && $args[ 'hierarchical' ] ) {
                        $output .= ' cat-parent';
                    }
                    if ( $args[ 'current_category_ancestors' ] && $args[ 'current_category' ] && in_array( $cat->term_id, $args[ 'current_category_ancestors' ] ) ) {
                        $output .= ' current-cat-parent';
                    }
    
                    $thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true );
                    $img_url= wp_get_attachment_url( $thumbnail_id );
                    $image = ! empty($img_url) ?  '<img class="wpp-term-thumb" src="' . $img_url . '" alt="" />' : '';
    
                    $output .= '"><a href="' . get_term_link( (int) $cat->term_id, $this->tree_type ) . '">'  . $image . _x( $cat->name, 'product category name', 'woocommerce' ) . '</a>';
                    if ( $args[ 'show_count' ] ) {
                        $output .= ' <span class="count">(' . $cat->count . ')</span>';
                    }
                }
    
                public function end_el(&$output, $cat, $depth = 0, $args = array()) {
                    $output .= "</li>\n";
                }
    
                public function display_element($element, &$children_elements, $max_depth, $depth = 0, $args, &$output) {
                    if ( !$element || ( 0 === $element->count && !empty( $args[ 0 ][ 'hide_empty' ] ) ) ) {
                        return;
                    }
                    parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
                }
            }
        endif;


    В functions.php или где то еще, делаем так

    function wpp_change_widget_product_categories_walker($array) {
    
            require_once 'Путь_к_файлу_с_добаленным_классом';
    
            $array[ 'walker' ] = new WPP_WC_Product_Cat_List_Walker_With_Thumb;
    
            return $array;
    
        }
    
        add_filter('woocommerce_product_categories_widget_args','wpp_change_widget_product_categories_walker');
    Ответ написан
    Комментировать
  • Как изменить расположение описания на странице товара Woocommerce?

    wppanda5
    @wppanda5 Куратор тега WooСommerce
    WordPress Mедведь
    Судя по всему, в вашей теме переопределен вывод блоков, скорее всего хуками.
    В дефолтном WooCommerce табы идут как раз снизу. и подвешены на экшен 'woocommerce_after_single_product_summary' с приоритетом 10. В вашем же случае, они повешены на 'woocommerce_single_product_summary' с не понятным приоритетом, но думается, мне, что он 70

    Соответственно, вам надо вернуть все в зад.

    function wpp_reset_product_data_tabs_position(){
    // тут возможно и не 70, надо поиграться с этим параметром, или найти приоритет указанный в теме
    remove_action( 'woocommerce_single_product_summary' ,'woocommerce_output_product_data_tabs', 70);
    //тут именно так
    add_action( 'woocommerce_after_single_product_summary' ,'woocommerce_output_product_data_tabs', 10);
    }
    // тут с приоритетом можно поиграться, но думается мне 100 вполне хватит
    add_action('init','wpp_reset_product_data_tabs_position',100);
    Ответ написан
    Комментировать
  • Как вывести на WP доп. поля к изображениям?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Судя по этому 'cr_upload', вы используете мой старый плагин, к сожалению, я тогда был глуп и хранил в поле именно URL а не id, пиши я его в данный момент, я бы сохранил как массив, из id, url, alt и title.

    Получить id можно следующим образом

    $url = get_post_meta(get_the_ID(),'cr_upload',true);
    $attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $url )); 
    return $attachment[0];


    ну а зная id можете вытащить по нему уже все что, угодно.

    UPD: Вроде нашел исходник
    Это оно ?
    ed47467dd6.jpg
    Если хотите, могу вечером слегка подправить его.
    Ответ написан
  • Как сделать ajax подгрузку, сначала при нажатии а потом скролле?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Вот Билл Эрриксон скомпилированный под вашу задачу.
    php
    /**
         * Javascript for Load More
         *
         */
        function be_load_more_js() {
    
            if ( !is_singular( 'post' ) )
                return;
            $query = array(
                'post__not_in'   => array( get_queried_object_id() ),
                'category_name'  => ea_first_term( 'category', 'slug' ),
                'posts_per_page' => 3
            );
            $args = array(
                'url'   => admin_url( 'admin-ajax.php' ),
                'query' => $query,
            );
            wp_enqueue_script( 'be-load-more', get_stylesheet_directory_uri() . '/js/load-more.js', array( 'jquery' ), '1.0', true );
            wp_localize_script( 'be-load-more', 'beloadmore', $args );
    
        }
    
        add_action( 'wp_enqueue_scripts', 'be_load_more_js' );
    
        /**
         * AJAX Load More
         *
         */
        function be_ajax_load_more() {
            $args = isset( $_POST[ 'query' ] ) ? array_map( 'esc_attr', $_POST[ 'query' ] ) : array();
            $args[ 'post_type' ] = isset( $args[ 'post_type' ] ) ? esc_attr( $args[ 'post_type' ] ) : 'post';
            $args[ 'paged' ] = esc_attr( $_POST[ 'page' ] );
            $args[ 'post_status' ] = 'publish';
            ob_start();
            $loop = new WP_Query( $args );
            if ( $loop->have_posts() ): while ( $loop->have_posts() ): $loop->the_post();
                be_post_summary();
            endwhile; endif;
            wp_reset_postdata();
            $data = ob_get_clean();
            wp_send_json_success( $data );
            wp_die();
        }
    
        add_action( 'wp_ajax_be_ajax_load_more', 'be_ajax_load_more' );
        add_action( 'wp_ajax_nopriv_be_ajax_load_more', 'be_ajax_load_more' );
    
        /**
         * First Term
         * Helper Function
         */
        function ea_first_term($taxonomy, $field) {
            $terms = get_the_terms( get_the_ID(), $taxonomy );
    
            if ( empty( $terms ) || is_wp_error( $terms ) )
                return false;
    
            // If there's only one term, use that
            if ( 1 == count( $terms ) ) {
                $term = array_shift( $terms );
            } else {
                $term = array_shift( $list );
            }
    
            // Output
            if ( $field && isset( $term->$field ) )
                return $term->$field;
    
            else
                return $term;
    
        }

    js
    jQuery(function ($) {
    
            $('.post-listing').append('<span class="load-more">Click here to load earlier stories</span>');
            var button = $('.post-listing .load-more');
            var page = 2;
            var loading = false;
            var scroll = false;
            var scrollHandling = {
                allow: true,
                reallow: function () {
                    scrollHandling.allow = true;
                },
                delay: 400 //(milliseconds) adjust to the highest acceptable value
            };
    
            function morer() {
                if (!loading) {
                    loading = true;
                    var data = {
                        action: 'be_ajax_load_more',
                        page: page,
                        query: beloadmore.query,
                    };
                    $.post(beloadmore.url, data, function (res) {
                        if (res.success) {
                            $('.post-listing').append(res.data);
                            $('.post-listing').append(button);
                            page = page + 1;
                            loading = false;
                        } else {
                            // console.log(res);
                        }
                    }).fail(function (xhr, textStatus, e) {
                        // console.log(xhr.responseText);
                    });
                }
            }
    
    
            $('body').on('click', '.load-more', function () {
                if (scroll === false) {
                    morer();
                   $('.load-more').remove();
                    scroll = true;
                }
            });
    
            $(window).scroll(function () {
                if (scroll === true) {
                    if (!loading && scrollHandling.allow) {
                        scrollHandling.allow = false;
                        setTimeout(scrollHandling.reallow, scrollHandling.delay);
                        var offset = $(button).offset().top - $(window).scrollTop();
                        if (2000 > offset) {
                            morer();
                        }
                    }
                }
            });
    
        });
    Ответ написан
    1 комментарий
  • Не могу изменить текст около значка корзины на сайте Wordpress?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Потому что там срабатывает get_refreshed_fragment В которой отрабатывает функция woocommerce_mini_cart() которая в свою очередь подключает шаблон templates/cart/mini-cart.php В котором и находится искомое Вами.

    Однако по правильному переводы в WP делаются не так, а так
    Ответ написан
    6 комментариев
  • Как передать данные с формы с помощью ajax php скрипту в wordpress?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Ajax на морде сайта работает так, как собрать данные с формы, и отправить их почтой думаю сообразите, оно ничем не отличается от обычной отправки

    PHP подключение скрипта с запуском AJAX и обработчик
    <?php
    #Подключение JS
        function my_enqueue_js() {
            #Скрипт с обработчиком код скрипта ниже
            wp_enqueue_script( 'my-ajax', get_template_directory_uri() . '/assets/js/my-ajax.js', array('jquery'), '1.0.0', true );
            #Отпрака переменных в скрипт
            wp_localize_script( 'my-ajax', 'MyAjax', array(
                'ajax_url' => admin_url( 'admin-ajax.php' ),
                'security' => wp_create_nonce( 'my-security-string' )
            ));
        }
    
        add_action( 'wp_enqueue_scripts', 'my_enqueue_js' );
    
        #Обработчик
        function my_action_callback() {
            check_ajax_referer( 'my-security-string', 'security' );
            $int = intval( $_POST['int'] );
            $int += 10;
            echo $int;
            wp_die();
        }
    
        #Добавление обработчика
        #  вешается на wp_ajax_{имя_экшена}
        # имя экшена должно совпадать с тем, которое задано  в js
        add_action( 'wp_ajax_my_action', 'my_action_callback' );
        #не забываем про nopriv для неавторизованных юзерей
        add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );


    Скрипт my-ajax.js в данном примере должен лежать по адресу
    КОРЕНЬ_ТЕМЫ/assets/js/my-ajax.js
    jQuery(document).ready(function($) {
    
      var $data = {
        action: 'my_action',
        security : MyAjax.security,
        int: 1234
      };
    
      $.post(MyAjax.ajax_url, $data, function($response) {
        alert('1234 + 10  =  ' + $response);
      });
      
    });
    Ответ написан
    2 комментария
  • Стоит ли брать SEO Yoast Премиум версия для WordPress?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    На ваше усмотрение, но ничего сильно полезного там нет в премум версии
    Ответ написан
    Комментировать
  • Wordpress сделать выборку страниц?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    главной и страницах каталога и категорий каталога.

    Учим матчасть
    if( is_front_page() || is_woocommerce() ) { }
    Ответ написан
  • Как в WORDPRESS сделать чтобы class="active" был только у первого массива?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Никогда не пользуйте сокращенные теги.
    <div class="<?php printf('item slider__item--%s %s', ++$cnt , $cnt === 1 ? 'active' : '' ); ?>">
    Ответ написан
  • Есть ли плагин для WordPress, запрещающий работу других плагинов на определенной странице?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Такого плагина нет, но плагины вешаются на хуки, соответственно посмотрев на что повешен конкретный плагин, вы можете создать свой, в котором с помощью условных тегов в нужных местах будете отменять вызов нужных плагинов через remove_action и remove_filter
    Ответ написан
    Комментировать
  • Wordpress: Кастомная форма входа и редирект на wp-login.php?pass=1?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Вам виднее, что там у вас за код, и что такое ?pass=1,
    ибо такого GET параметра в API авторизации нет
    Ответ написан
    1 комментарий
  • Как грамотно разрабатывать сайт на cms?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    1.Тз
    2.Прототип
    3.Дизайн
    4.Верстка
    5.Альфа
    6.Тест заказчиком
    7. Правки

    Плагины и прочие фигины сугубо индивидульно зависит от задач.

    Нормальный сайт должен выполнять свои задачи без плагинов, хотя бы без явно установленых, дабы БлондинкО администратор сайта не сумела там всякое поломать. Запрет деактивации / активации плагинов не вариант.

    Ну и сайт портального типа, обычно имеет большую нагрузку, а вот большинство плагинов они универсальные, и вам из них надо только определенные задачи + создатели плагинов обычно (есть исключения) не особо заморачиваются над рефакторингом и скоростью работы кода, что тоже сказывается на работе вашего сайта не в лучшую сторону
    Ответ написан
    5 комментариев
  • Как сделать такой каталог в wordpress (пример внутри)?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Все зависит от ваших знаний
    Быстрее всего такое делать без плагинов, на таксах и произвольных полях,
    если хочется плагинов, то вполне можете сделать свои шаблоны вывода для WooCommerce
    Ответ написан
    Комментировать
  • Как быстро разрабатывать сайты визитки и простые корпоративные сайты на wordpress на старте?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Способ ровно один.
    Знание PHP + разобраться с API движка сильно в этом поможет кодекс
    https://codex.wordpress.org/%D0%A1%D0%BE%D0%B7%D0%...

    для более сложных тем Как натянуть свою верстку на Wordpress?

    И практика, практика, практика
    Ответ написан
    Комментировать
  • Как интегрировать woocommerce в свою нестандартную тему?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Инструкции достаточно, все должно грузиться, не работать может по многим другим причинам, например не указан boby_class
    Ответ написан
    1 комментарий
  • Woocommerce - после входа пользователь возвращался на страницу c которой заходил?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    add_filter('woocommerce_login_redirect', 'my_wc_login_redirect', 10, 2);
     
    function my_wc_login_redirect(  $redirect, $user  ) {
          return wp_get_referer() ? wp_get_referer() : home_url();
    }
    Ответ написан
  • Как изменить функционал кнопки добавить в корзину?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    # отключаете стандартные кнопки
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart');
    remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
    # подключаете свои
    remove_action( 'woocommerce_after_shop_loop_item', 'my_btn_to_cart');
    remove_action( 'woocommerce_single_product_summary', 'my_btn_to_cart', 30 );


    функцией my_btn_to_cart() подключаете свою кнопку, на которую вешаете, что хотите
    Ответ написан
    Комментировать
  • Убрать @media Wordpress?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Ваш WordPress захвачен Сатаной, и это его великое Колдунство.

    169469b36c.jpg

    Чистый WordPress так себя не ведет, и ничего такого не добавляет.
    Рекомендую, все таки внимательно посмотреть структуру темы, или обратиться к Экзорцисту.
    Ну ссылка на сайт для проведения ускоренного обряда очищения от такого поведения конкретного ответа сильно бы не помешала.
    Ответ написан
    3 комментария
  • Visual Composer 4.9.1 -- Wordpress 4.7.2 после обновления не работает?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Текущая версия Visual Composer 5.0.1, ваша проблема - известна разработчикам.
    https://codecanyon.net/item/visual-composer-page-b...
    Решение обновление плагина до актуальной версии.

    Если плагин спиратен, то лезьте в консоль, там светится причина ошибки, можно и разобраться, но имхо дешевле купить
    Ответ написан
    Комментировать