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

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Изменяя уже существующие колонки, есть вероятность, что эти колонки может изменить и разработчик любого из плагинов или сами разрабы WP, соответственно, в определенный момент, привязки на эти колонки могут перестать работать. Я использую более надежный способ, добавление своей колонки с нужным мне содержимым.

    functions.php:
    // add custom column
    function add_custom_column($columns) {
        $columns['short_description'] = __('Краткое описание', 'my_custom_plugin');
        unset($columns['description']);
        return $columns;
    }
    
    add_filter('manage_edit-category_columns', 'add_custom_column');
    
    // fill custom column
    function fill_custom_column($deprecated, $column_name, $term_id) {
        if('short_description' === $column_name) {
            $term = get_term($term_id);
            echo mb_substr($term->description, 0, 20) . (mb_strlen($term->description) > 20 ? '…' : '');
        }
    }
    
    add_action('manage_category_custom_column', 'fill_custom_column', 10, 3);
    Ответ написан
    1 комментарий
  • Как ограничить количество пользователей для регистрации на сайте WordPress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Отключаем возможность регистрации пользователей, если их более 140, и включаем обратно, если их мене 140, functions.php:
    add_action('init', function() {
        $limit = 140;
        $count_users = count_users();
        $total_users = $count_users['total_users'];
    
        if($total_users > $limit) {
            update_option('users_can_register', false);
        } else {
            update_option('users_can_register', true);
        }
    });
    Ответ написан
    Комментировать
  • Как заблюрить товары на страницах для незарегистрированных пользователей?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как заблюрить товары на страницах для незарегистрированных пользователей?

    Т.к. не понятно, какой метод блюра использовать, то покажу пример реализации css блюра у класса .product:
    // functions.php:
    
    function test() {
        if (!is_user_logged_in()) {
            wp_add_inline_style('woocommerce-general', '.product {filter: blur(5px)}');
        }
    }
    add_action('wp_enqueue_scripts', 'test');

    А также есть вопрос по закрытию доступа к заказу из корзины, если пользователь не авторизован.

    Можно кодом, с редиректом на страницу с id=myaccount:
    // functions.php:
    
    function test() {
        if (!is_user_logged_in()) {
            wp_redirect(get_permalink(wc_get_page_id('myaccount')));
            exit;
        }
    }
    add_action('woocommerce_before_checkout_form', 'test');

    Или плагинами:
    - WooCommerce Members Only plugin
    - YITH WooCommerce Catalog Mode plugin
    Ответ написан
    3 комментария
  • Как убрать спам с сайта?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Переводите сайт на https.

    Провайдер интернета может встраивать рекламу на сайты без HTTPS из за отсутствия шифрования данных, передаваемых между пользователем и сайтом. Это позволяет провайдеру легко модифицировать трафик, вставляя в него рекламные баннеры или сообщения.
    Ответ написан
    Комментировать
  • Почему не записываются emoji в базу данных?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Бд mysql wp должна иметь кодировку utf8mb4 (поддерживает хранение символов юникод втч. эмоджи), а вот utf8 в mysql не поддерживает 4 байтные символы, к которым относятся и эмоджи, из за чего они заменяются на знаки вопроса.

    wp-config.php:
    define('DB_CHARSET', 'utf8mb4');
    define('DB_COLLATE', 'utf8mb4_unicode_ci');

    И изменяем кодировку таблицы бд c utf8 на utf8mb4.
    Ответ написан
    6 комментариев
  • Летит бот-трафик с разных сайтов?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Ребят, как найти источник злодеяния?

    Искать ничего не нужно, нужно блокировать то, что возможно заблокировать с минимальными издержками. Самый быстрый вариант - CloudFlare, гуглить "CloudFlare Bot Blocking guide". Сразу говорю, CloudFlare слегка просаживает позиции сайта за счет увеличения времени доступа к контенту сайта, НО! Если удастся отфильтровать большинство ботов, то тем самым Вы поднимите ПФ сайта, и можно рассчитывать на то, что сайт как минимум вернется на изначальные позиции, а может и выше.
    Кстати, я заходил на эти самые говносайты и линкбэк я на свой сайт не обнаружил - вероятно их используют как рефер может быть или просто перенаправление.

    Бот может создавать ссылку в dom страницы и кликать по ней. Анкор ссылки может быть разным, но видел следующие варианты: "сайт продает наркотические вещества", "сайт обманывает пользователей", "сайт крадет данные кредитных карт" итп. Как Вы понимаете, на этом сайте стоят счетчики всех популярных ПС, которые видят клик по ссылке с этим анкором. Насколько эффективно ПС могут бороться с таким "SEO" - это другой вопрос.
    Также сразу вызывает подозрение, что IP адреса - все от мобильных операторов.

    Потому что это самый эффективный вариант маскировки ботов, особенно, если в Вашей тематике итак было 80%+ мобильных ip.
    Ответ написан
    Комментировать
  • Тормозит фильтр товаров на wordpress, что делать?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Может подскажете спеца который может решить данную проблему.

    Фриланс.
    Или как можно решить ее самому.

    1. Быстро и дешево - кэширование, но не все можно закэшировать.
    2. Медленно и дорого - переписывание фильтра + оптимизация wp/wc + кэширование.
    3. Очень медленно и очень дорого - переписывание сайта под конкретные задачи.

    Рекомендую к ознакомлению (вместо Python/Django можно выбрать любую понравившуюся технологию) - Что выбрать WP или Python+Django для сайта?
    Ответ написан
    Комментировать
  • Contact Form 7 - как отслеживать какой пользователь отправил форму?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Но проблема в том что форму заполняет сразу несколько человек и сложно идентифицировать какой человек проходит этапы.

    Номер телефона или почта указывается пользователем?

    да единожны на первой форме

    Достаточно не простая задача, т.к. необходимо реализовать множество этапов по связке этапов с конкретным пользователем, особенно, на бэке. Если коротко, то:
    1. Форма должна слать куку пользователя, чтобы бэк мог понимать, кто перед ним.
    2. Бэк должен понимать, кто шлет ему форму, чтобы связать разные этапы.
    Ответ написан
    Комментировать
  • Проверка на конкретный IP адрес?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Вставляем в нужное место записи:
    if ($_SERVER['REMOTE_ADDR'] === '12.223.72.223') {
        echo 'Detected ip 12.223.72.223!';
    }
    Ответ написан
  • Как связываются таблицы базы данных WordPress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Через id:
    - Поле post_author в таблице wp_posts содержит id пользователя, который является автором поста.
    - Поле user_id в таблице wp_usermeta содержит id пользователя, которому принадлежат метаданные.
    - Поле comment_post_ID в таблице wp_comments содержит id поста, к которому относится комментарий.

    Через промежуточные таблицы:
    - Таблица wp_term_relationships связывает записи с категориями и тегами.
    - Таблица wp_postmeta хранит метаданные для записей и других объектов.

    Например, связь между постом и его автором:
    - Поле post_author в таблице wp_posts содержит id пользователя, который является автором поста.
    - id пользователя можно использовать для поиска записи в таблице wp_users, чтобы получить информацию о нем.

    phpmyadmin:
    - Ограничения внешнего ключа отображаются только для связей, реализованных с помощью внешних ключей.
    - Другие связи можно увидеть, используя другие инструменты, например, плагин Adminer.
    Ответ написан
    5 комментариев
  • Как через wpcf7mailsent добавить класс к одному попапу, а не всем, в которых данная форма?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Если одна и та же форма вызывается в попапах на странице несколько раз, то как обратиться к родителю конкретной форме, т.к. this не работает?

    У анонимных функций в js нет своего this, соответственно берется this из скоупа выше.
    Но так, естественно, новый класс прикрепляется ко всем попапам.

    Можно попробовать искать ближайшего родителя с css классом modal-body (т.е. настоящей формы, где сработало событие wpcf7submit):
    document.addEventListener('wpcf7submit', (e) => {
        if ('123' === e.detail.contactFormId) {
            const form = e.target;
            const modalBody = form.closest('.modal-body');
    
            if(modalBody) {
                modalBody.classList.add('thanks-this');
            }
            else {
                console.log('Творится какая то дичь!');
            }
        }
    });
    Ответ написан
    Комментировать
  • Как исправить ошибку двух SEO-плагинов в WordPress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Имеет ли вообще значение, какой из плагинов генерирует файл sitemap?

    Нет, имеет значение итоговый sitemap на выходе, который соответствует базовым правилам.
    Ответ написан
    Комментировать
  • Как из админки запустить php-скрипт по клику?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Я бы использовал плагин, с личной админкой и кнопкой на панели меню:
    /*
    Plugin Name: Супер плагин
    Description: Невероятный плагин, взламывает пентагон по клику!
    Version: 0.1
    Author: Михаил Р.
    */
    
    function super_plugin_menu() {
        add_menu_page('Супер плагин', 'Супер плагин', 'manage_options', 'custom-php-executor', 'super_plugin');
    }
    
    function super_plugin() {
        if(isset($_POST['custom_php_code'])) {
            $code = stripslashes($_POST['custom_php_code']);
            update_option('super_plugin_custom_code', $code);
        } else {
            $code = get_option('super_plugin_custom_code', '');
        }
    
        ?>
        <div class="wrap">
            <h2>Супер плагин</h2>
            <form method="post">
                <textarea
                    name="custom_php_code"
                    style="width:100%;height:200px;"
                ><?php echo htmlspecialchars($code); ?></textarea>
                <input type="submit" value="Выполнить, как следует!" class="button button-primary">
            </form>
        </div>
    
        <?php
        if(!empty($code)) {
            eval($code);
        }
    }
    
    add_action('admin_menu', 'super_plugin_menu');

    КартинкО

    65ca1aaf1a6e2384036131.png
    65ca1ab6114ec549148365.png
    65ca1abcca92b540993230.png
    65ca1ac2ceaff186880778.png
    Ответ написан
    2 комментария
  • Contact Form 7 как сделать автоматический переход между полями?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Поля формы ограничены по количеству символов

    Т.к. надо угадать, что такое "ограничены по количеству символов", то предположу, что речь о length input.

    Подключить скрипт на сайт, и при необходимости, подкорректировать селектор полей формы:
    document.addEventListener('DOMContentLoaded', () => {
        const elements = document.querySelectorAll('.wpcf7-form input[type="text"], .wpcf7-form textarea');
    
        elements.forEach((el, i) => {
            const maxLength = parseInt(el.getAttribute('maxlength'), 10);
    
            el.addEventListener('input', () => {
                const length = el.value.length;
                if (length >= maxLength) {
                    if (i + 1 < elements.length) {
                        elements[i + 1].focus();
                    }
                }
            });
        });
    });
    Ответ написан
    Комментировать
  • Contact Form 7 как запретить ввод пробелов?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Подключить скрипт на сайт, и при необходимости, подкорректировать селектор полей формы:
    document.addEventListener('DOMContentLoaded', () => {
        const elements = document.querySelectorAll('.wpcf7-form input[type="text"], .wpcf7-form textarea');
    
        elements.forEach((el) => {
            el.addEventListener('input', (e) => {
                e.target.value = e.target.value.replace(/\s+/g, '');
            });
        });
    });

    UPD из комментов, ограничение на ввод в input только цифр (необходимо указать css класс такому input only-numbers):
    document.addEventListener('DOMContentLoaded', () => {
        const elements = document.querySelectorAll('.only-numbers');
    
        elements.forEach((el) => {
            el.addEventListener('input', (e) => {
                e.target.value = e.target.value.replace(/\D/g, '');
            });
        });
    });
    Ответ написан
    3 комментария
  • 404 ошибка при переходе на страницу рубрик?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Проблема 404 была при указание rewrite в cpt:
    'rewrite' => array('slug' => '/', 'with_front' => false),

    Проблема 404 была решена так:
    'rewrite' => array('slug' => 'services', 'with_front' => false),
    Ответ написан
    Комментировать
  • Как сделать аналог медиа запросов в Wordpress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Можно через тег picture, браузером будут подгружены лишь те изображения, которые удовлетворяют условию, либо дефолтное изображение:
    <?php if(have_rows('slider', 59)): ?>
        <div class="slider">
            <?php while(have_rows('slider', 59)): the_row();
                $images = get_sub_field('slider-image'); // slider images
    
                if(!empty($image)):
                    $large = $images['sizes']['large'];
                    $medium = $images['sizes']['medium'];
                    $regular = $images['regular'] ? $images['regular'] : '';
                    ?>
                
                    <picture>
                        <source
                            media="(max-width: 799px)"
                            srcset="<?php echo esc_url($medium);
                        ?>"/>
    
                        <source
                            media="(min-width: 800px)"
                            srcset="<?php echo esc_url($large);
                        ?>"/>
    
                        <img
                            src="<?php echo esc_url($large); ?>"
                            alt="<?php echo esc_attr($regular);
                        ?>"/>
                    </picture>
                
                <?php endif; endwhile; ?>
        </div>
    <?php endif; ?>

    Да, я в курсе, что никак.

    Что значит никак? В теге source имеется атрибут media с аналогичным поведением и параметрами css директиве media.
    Ответ написан
    Комментировать
  • Какой хостинг выбрать под WP?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Вопрос не в хостинге, а в конкретном приложение (сайте), насколько он оптимизирован. В Вашем случае, только методом тыка, арендуете 1 тариф и смотрите, какая нагрузка, затем делайте выводы.
    Ответ написан
    Комментировать
  • Что будет если не активировать лицензионный ключ плагина?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    - ст. 7.12 КоАП РФ.
    - п. 2 ст. 146 УК РФ.
    - п. 3 ст. 146 УК РФ.

    По какому тарифу оформляться будем?
    Ответ написан
    Комментировать