Задать вопрос
  • Какие плагины вы считаете стандартными для работы в WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Как уже написали, универсального набора не существует, ибо задачи разные. Но есть некоторые наметки по этому поводу. Сразу оговорюсь - у меня всех без исключения WP-проекты построены на базе Composer, зависимостями (а плагины ими и являются) управлять просто и удобно, плюс autoload. Это позволяет динамически включать-выключать плагины в зависимости от переменных среды или feature flags. А теперь сами плагины. Разобьем им сразу на 2 категории - development и production. Первые нужны для облегчения разработки и отладки проекта, вторые - всегда.

    Development-only плагины:

    - Query Monitor
    - Transients Manager
    - WP Crontrol
    - Airplane Mode
    - Debug wp_redirect
    - User Switching
    - Rewrite Rules Inspector
    - rarst/wps (обертка для Whoops)
    - rarst/laps (профайлер)
    - Regenerate Thumbnails
    - Парочка кастомных mu-plugins которые облегчают жизнь (обертка для symfony/var-dumper и тд)

    Production:

    - ACF Pro
    - Кеширование - WP Super Cache, Batcache, WP Fastest Cache. Redis/Memcached для объектного кеша (все есть от именитых команд типа 10Up, Humanmade и тд) - какой конкретно зависит от проекта
    - Для форм использую свою наработку, HTML чистый который делает верстальщик, обработчик - своя кухня которая использует внешний transactional email service (SendGrid, Amazon SES и другие - адаптеры пишутся по необходимости) с их темплейтами для писем, использует composer-библиотеки для валидации и тд. Для всех форм также создается custom post type, все сабмишны пишутся туда с логом (сами данные формы, статус отправки транзакционного письма, лог мейлера и тд - удобно для отладки). На первый взгляд звучит сложно, но благодаря ООП-архитектуре по принципу Laravel / Laravel Nova все настраивается буквально за считанные минуты. Но если бы использовал готовый плагин, то скорее всего CF7.
    - Disable Comment - потому что на большинстве сайтов они не нужны
    - Classic Editor - потому что все еще не везде подходит/заходит Gutenberg
    - Duplicate Post - удобно для работы с контентом, активируется по необходимости
    - Enable Media Replace - иногда полезен, активируется по необходимости
    - EWWW Image Optimizer Cloud - удобно, дешево
    - Lazy Load Optimizer - полезная штука для frontend performance
    - Safe SVG - SVG сейчас везде, так что без него никуда
    - Cyr-To-Lat - если сайт кириллический / мультиязычный
    - Для мультиязычных сайтов чаще всего останавливаемся на WPML
    - ElasticPress - для поиска/фильтров
    - WP-Minions или Cavalcade - для асинхронных фоновых задач
    - humanmade/S3-Uploads - для медиа-библиотеки в S3

    Дальше, для разных задач есть свои "фавориты" и/или свои кастомные наработки.

    Ну и, конечно же, WP CLI.
    Ответ написан
    Комментировать
  • Как вы улучшаете "скорость" работы компьютера?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Говорят, если отформатировать жесткий диск и поставить с нуля чистую ось, то все снова летает.
    Ответ написан
    4 комментария
  • Где надо rewritить URL в wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Обычно на хуке init висит add_rewrite_rule(), а на хуке template_redirect или template_include висит подключение нужного шаблона. Переменная, которая заполняется в add_rewrite_rule() регистрируется на фильтре query_vars. Поищите глобально в коде перечисленные фрагменты.
    Ответ написан
    Комментировать
  • Как вывести количество дочитываний статьи в Вордпрессе?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Можно гугланалитикс задействовать, с помощью событий. Я бы так делал, потом из такой статистики можно интересные выводы делать по части маркетинга. Ну а чтоб вывести на сайте, используем SDK, тянем из GA и кешируем в postmeta.
    Ответ написан
    Комментировать
  • Почему у меня не получается обратиться к методу модели для связи?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Из того что я вижу, $builder у вас является коллекцией, а метод category() вероятно является методом модели, которая по идее должна находиться в этой коллекции. У самой коллекции такого метода нет, отсюда Exception. Видимо вам поможет $builder->first()->category().
    Ответ написан
    7 комментариев
  • Почему не работает elseif в цикле?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вы не можете прерывать поток if/elseif/else циклом for. В данном случае elseif перестает быть веткой логики if, а становится самостоятельной веткой внутри for, соответственно должен быть записан как if.
    Ответ написан
    Комментировать
  • Middleware или Controller?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    lovebarcafc,
    но блин создавать посредника, объявлять его и далее подключать, не совсем уместно для передачи одного не сложного параметра

    А если таких параметров больше? И контроллеров, в которых это делается тоже больше 1? Смысл middleware в том, что его можно применить массово из одного места - на все роуты, только апи, консоль или веб, группу роутов... Вот например я пишу АПИ для iOS приложения, и хочу быть уверен, что все запросы на мои роуты содержат заголовок Content-Type: application/json. Запилить под это middleware - самое оно.

    Middleware следует воспринимать не как из примера в доке с возрастом, а как слои, через которые request и response проходят. Request входит в приложение и пропускается через ряд "фильтров" (middleware), потом то же самое происходит с response.
    Ответ написан
    Комментировать
  • Как решать конфликт, если фронт энд разработчик в другом городе, а конфликты на фронте и бэке?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Фронт и бек в отдельных ветках, например frontend и backend. Пулл-реквесты из этих веток в одну, например develop. Конфликты будут раздельные и каждый автор своей ветки (frontend, backend) пусть сам резолвит их у себя пока pull request не позеленеет.

    Где физически находится тот или другой разработчик - не важно. Git он как раз про раздельную и независимую работу, в том числе (если не в первую очередь - remote).
    Ответ написан
    Комментировать
  • Как в phpstorm автоматически изменить namespace во всех phpdoc?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Replace in path? Можно сузить поиск по скоупу, директории, отфильтровать (например, только в комментах), а с помощью regex ограничить какие конкретно FQN менять:

    5d5bbc5ee9832537984755.jpeg

    зы: и да,
    Как во всех phpdoc блоках заменить полные пути на FQN?

    FQN это и есть полный путь :)

    ззы: Помнится до установки последней версии PhpStorm (и вместе с этим чистки плагинов) был Intention "Replace FQN with import", но сейчас не вижу его у себя.
    Ответ написан
  • Как добавить редирект для авторизованного пользователя WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Пытаться редиректить с помощью javascript из php - это конечно сильный ход :)

    Вставьте в functions.php
    function custom_homepage_redirect()
    {
        if ( is_front_page() && is_user_logged_in() ) {
            wp_redirect( home_url( '/home' ) );
            die;
        }
    }
    add_action( 'template_redirect', 'custom_homepage_redirect' );
    Ответ написан
    Комментировать
  • Хорошо ли плагины работают с кастомными темами в WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если темы делать "по учебнику" (согласно требованиям и рекомендациям из официальной документации и Theme Handbook), с адекватными плагинами, которые исповедуют такой же подход, проблем не будет - все будет совместимо. С говноплагинами проблемы будут, но они будут и на официальной теме, и на платной/премиум, и на любой другой. Ибо говноплагин.
    Ответ написан
    Комментировать
  • Как работает шаблонизатор Blade?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Если вы отвечаете за дизайн, то вам нечего делать в blade-шаблонах. Там могут тусоваться бекендеры и фронтендеры, но не дизайнеры.
    2. Шаблонизаторы работают так, что сами шаблоны потом компилируются в обычный php/html-код и кешируются. Для рендеринга страницы используется этот кеш (это повышает производительность). Вот если вы поменяли шаблон, а кеш не очистили - изменений вы не увидите.
    3. Чтобы очистить кеш, как уже написал antimind нужно в консоли в корне проекта выполнить команду php artisan view:clear
    Ответ написан
    Комментировать
  • Как правильно сделать редирект на wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Все базовые редиректы (www/non-www, https/http) должны происходить на уровне веб-сервера (apache/nginx) а не PHP, и тем более WordPress. Я сам с apache давным давно не работаю, и корректной конфигурации под рукой нет. Но можете посмотреть вот здесь.
    Ответ написан
    Комментировать
  • Как правильно указать и получить id по ссылке на wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Предполагаю, что ID в коде у вас доступен, а для формирования параметров запроса вам поможет add_query_arg()
    Ответ написан
    1 комментарий
  • Как публиковать в блок не больше 10 записей?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Я уже несколько раз отвечал подробно с примерами кода на вопросы в стиле "как вывести по другому каждые X записей". Принцип везде один и тот же, включая ваш случай - в цикле проверяете кратность текущей итерации вашему Х (в данном случае - 10) и дописываете нужный фрагмент html-кода, если проверка возвращает true.

    Вот например:
    Как правильно написать формулу для вывода элементов на экран?
    Wordpress цикл bootstrap grid?
    Wp default loop break?
    Ответ написан
    3 комментария
  • Как разделить страницу wordpress на несколько частей?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    А в шаблоне страницы под the_content() есть wp_link_pages()?

    https://codex.wordpress.org/Styling_Page-Links
    Ответ написан
  • Как вы ориентируетесь в чужом коде?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Сначала поверхностно пробегаешься по тому, что можно назвать lifecycle чтобы понять что за чем идет. Это дает базовое понимание внутреннего устройства. Дальше читаешь код и комментарии (если они есть), документацию (если она есть). Переходишь между методами/функциями/классами, запускаешь через отладчик c остановкой в нужных точках, чтобы увидеть состояние приложения на нужный момент. Степень болезненности и геморройности данного процесса сильно зависит от качества архитектуры и качества кода в целом.
    Ответ написан
    Комментировать
  • Какой механизм Laravel использовать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Описание конечно весьма туманное и с использованием терминологии которая к Laravel как-то перпендикулярно... Есть контейнер - там регистрируются все ваши "компоненты", они же доступны "списком" из "любого места" и "на протяжении всего цикла работы приложения". Есть сервис-провайдеры, которые по сути и в том числе являются механизмом регистрации ваших "компонент" в контейнер (и как следствие - приложение). И есть еще куча других фич, которые наверняка заменят элементы ваших компонент, если вы разберетесь с внутренним устройством Laravel и начнете думать ее архитектурой.
    Ответ написан
    Комментировать