• Какие плагины вы считаете стандартными для работы в 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.
    Ответ написан
    Комментировать
  • Как сделать тяжелый импорт из excel 800к товаров?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    xls сохранить в csv, дальше LOAD DATA INFILE в mysql-ной консоли. Загружал таким образом файлики на десятки миллионов строк - залетает на ура.
    Ответ написан
    Комментировать
  • Где найти WordPress right way?

    lukoie
    @lukoie
    Интересует вот что:
    1. Как все это запихивается под версионный контроль?

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

    2. Где можно посмотреть руководство по эксплуатации внутренностей от людей, которые хотя бы знают что такое KISS и говорят на одном языке с разработчиками?

    У ВП есть бойлерплейт для шаблона и для плагина. С ООП, классами, блекджеком и гейшами. Бери и пользуй. Не хош десять файлов этого вашего ООП - делай в одном файле любую дичь. ВП и это схавает.

    3. Есть ли аналог php the right way где собраны всякие плюшечки в одном месте?

    у русскоязычных считается меккой сайт wpkama

    4. Советы от людей, которые как и я пришли разбираться с wp после паттернов проектирования.

    Самый важный совет - перестать гнать на ВП. Его писали программисты. Нормальные, зрелые программисты. И еще десяток-сотня программистов его тестила и правила. Практически на любой проект найдется десяток людей, кто будет фыркать что и тут не так, и там не сяк, и всё не правильно. ВП это инструмент для КОНТЕНТ МЕНЕДЖМЕНТА, а не для программиста. Это не друпал, сделанный программистами для программистов ради самого программирования. Создатели ВП осознают что это инструмент, который нужен для человека, который будет наполнять сайт, а программист с дизайнером нужны только на начальных этапах его создания, и ВП сделан не ради и не для них.
    Ответ написан
    Комментировать
  • PHP ORM для бизнес приложений?

    @nozzy
    Symfony, Laravel, SQL
    Eloquent.
    С перспективой использования Laravel
    или Lumen или OctboberCMS.
    Ответ написан
    Комментировать
  • Как парсить контакты из сервиса AMOcrm?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    Возьмите что-нибудь нормальное для начала вместо этих простыней из всяких гайдов(например первая ссылка в гугле https://github.com/dotzero/amocrm-php)

    Потом возьмите доку https://www.amocrm.ru/developers/content/api/contacts
    query Поисковый запрос (Осуществляет поиск по заполненным полям сущности).

    И пилите свою логику.
    Ответ написан
    Комментировать
  • Как сделать выставление параметра при загрузке медиафайла в wordpress?

    PbI6A_KuT
    @PbI6A_KuT Автор вопроса
    Нашел сам
    function wps_display_attachment_settings() {
        update_option( 'image_default_link_type', 'file' );
    }
    add_action( 'after_setup_theme', 'wps_display_attachment_settings' );
    Ответ написан
    Комментировать
  • При обновлении темы "слетает" обратный звонок и чат. Как исправить?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Сделано специально)) Поинтересуйтесь с какой целью, оно сделано, что бы отваливалось)

    Судя по всему, у вас изменения внесены прямо в код темы, а делать это не надо, для такого существуют дочерние темы и плагины.

    UPD: Напомнило
    На стройку собирается комиссия. Прораб инструктирует рабочих:
    - Что бы ни случилось, делайте вид, что так и должно быть.
    Комиссия приехала, осматривает объект. Вдруг рухнула одна стена.
    Рабочий радостно, посмотрев на часы:
    - Десять тридцать пять. Точно по графику.
    Ответ написан
    Комментировать
  • Как на landing page реализовать выбор продукта?

    На кнопку для каждого товара добавьте дата атрибут:
    <button data-name="iPhone X">Заказать iPhone X</button>
    <button data-name="iPhone 8">Заказать iPhone 8</button>

    В вашу форму заказа добавьте скрытое поле:
    <input type="hidden" name="product-name">
    И добавьте jquery:
    $('button').on('click', function() {
     var name = $(this).data('name');
     $('[name="product-name"]').val(name);
    });
    Ответ написан
    6 комментариев
  • Какое backend решение выбрать для проектов на Vue.js?

    boratsagdiev
    @boratsagdiev
    Wordpress + Advanced Custom Fields плагин + Wordpress REST API - посмотрите на такую связку.
    Ответ написан
    3 комментария
  • Как передать значение в if?

    Dit81
    @Dit81
    Security researcher, pentester, internet-marketer
    Используйте var_dump($_POST['email2']); и print_r($_POST['email2']);!
    Ответ написан
    Комментировать
  • Как присвоить одинаковым div разные классы (jQuery)?

    alvvi
    @alvvi
    export default apathy;
    Array.prototype.slice.call( document.querySelectorAll('table') ).forEach(function(table, i) {
      table.classList.add('class'+i);
    });

    UPD: Ой, не заметил что jquery
    $('table').each(function(i,table) {
      $(table).addClass('class'+i);
    });
    Ответ написан
    5 комментариев
  • Как организовать международный прием платежей с минимумом налогов?

    @mgremlin
    Бизнес в и вокруг IT
    Во-первых, для международной экспансии придется нанимать международных юристов. Тут вопросы можно задавать только для того, чтоб составить свое мнение и сформулировать вопросы профессионалам, не более.

    Если говорить "за вообще" - то лично я стою за агентскую схему: "в там" регается компания-агент, которая за незначительный процент собирает деньги, основную сумму по договору отправляя материнской компании (например - в РФ). Конечно, ИП в России - удобная штука, но сумма оборотов уж очень ограничена, для международного-то маркетплейса :-)

    В США налоги платить придется в любом случае, вне зависимости от направления получения доходов, только размер и количество будут разными. В Делавере, кстати, помимо федеральных налогов будут еще и местные, налоги штата. Другое дело, что с агентского вознаграждения можно и заплатить - это немного. Но вот если клиент попадется из США, да еще и местный - то возникает налог с продаж (как минимум - в большинстве штатов), и тут уже агентский договор не рулит, платить придется с полной суммы. Жульнические схемы типа "клиента из США отправляем на европу, и наоборот" ловятся, читал такие сообщения краем глаза пару раз.

    В целом - поддержу предыдущих ораторов: на каждом рынке придется строить свою схему отдельно, и она будет очень сильно зависеть от частностей, например - от доли самого маркетплейса в сумме транзакции. Без юристов и спецов по International Taxation эту проблему не расколоть.
    Если бы я сам захотел принимать максимально широкий спектр платежей со всего мира в одной точке подешевле, я бы регнул контору в Вайоминге, США, и принимал деньги на пейпал.
    Ответ написан
    4 комментария
  • Книга о том как правильно должен работать программист?

    Astrohas
    @Astrohas
    Python/Django Developer
    "Как заставить себя не спать"
    "Зрение человека"
    "Легкие фитнес упражнения для беременных и полных"
    ----
    вот те книги что нужны программисту
    Ответ написан
    2 комментария
  • Как получить данные о пользователе который просмотрел письмо?

    AdGooroo
    @AdGooroo
    Специалист в области интернет-маркетинга
    Для начала надо создать следящий пиксель.
    <img src="http://www.google-analytics.com/collect?v=1&…" width="1" height="1">

    И добавляем в ссылку параметры, чтобы ссылка получилась примерно такой:
    http://www.google-analytics.com/collect?v=1&tid=UA-XXXXXX&t=event&cid=*|UNIQID|*&cn=hellridecase&cs=email&ec=blogemail&ea=open

    где:

    tid = идентификатор отслеживания Google Analytics (выглядит как UA-XXXX)

    cid = идентификатор сессии (Unique session id (recipient id))

    t = тип отслеживания (Tracking type) (event);

    ec = категория события;

    ea = действие по событию;

    el = ярлык события (необязательно);

    cn = название кампании (необязательно);

    cs = источник кампании (нужен, если отслеживаете кампанию).

    Присваиваем значения переменным

    В зависимости от того, насколько вы знакомы с GA, у вас может быть уже сложившаяся система использования переменных, так что способ, который мы предлагаем, — лишь один из нескольких возможных путей.

    Переменной tid присваиваем идентификатора отслеживания, а для «t» прописываем «event» (событие), чтобы GA понимал, что вы отслеживаете событие, а не просмотр страницы.

    Категория события (ec) может использоваться, чтобы группировать ваши события. Мы использовали название «blogemail»

    Действие по событию (ea) вы можете использовать, чтобы уточнить тип события, которое вы отслеживаете, например, взаимодействие, открытие, почтовый клиент, анимация и т.д.

    Ярлык события (el) указывать необязательно. Вы можете использовать его, чтобы указать тип взаимодействия (rollover, клик) или деталь, например, блок в письме, с которым взаимодействовал пользователь. Ещё можно использовать ярлык события, чтобы передавать тип почтового клиента (webkit, мобильный, браузерный gmail)

    Вы можете использовать название кампании (cn) и источник кампании (cs), чтобы отслеживать отчёты по email кампаниям. Источник кампании обязателен, если вы хотите отслеживать по названию кампании, и вы можете использовать любое значение. Я оставляю просто «email»

    Уникальный ID сессии (cid)

    Уникальный ID сессии (cid) — идентификатор, присваиваемый конкретной сессии конкретного пользователя. В обычном случае вы могли бы использовать email пользователя, но Google не разрешает этого делать. Согласно документации, информация, передаваемая в GA, не должна содержать персональных данных.

    Чтобы удовлетворить эти требования, вы можете обратиться к своему почтовому провайдеру и получить уникальные идентификаторы для каждого пользователя. В MailChimp для этого есть мердж тег, который создаёт идентификаторы пользователей:
    *|UNIQID|*
    Внедряем GA Pixel

    Теперь, когда у вас есть URL со следящим пикселем, вы можете использовать его в своих кампаниях. Вот здесь Tracking Interactions in Interactive Email можно почитать про основы этого.

    Вот некоторые примеры, реализованные с помощью кода из приведённой статьи (не забудьте заменить идентификатор отслеживания, )

    Отслеживание открытий Давайте начнём с простого отслеживания открытий, которое будет записывать событие всякий раз, когда письмо кто-то открывает (исходя из предположения, что картинки отображаются)

    <img src="http://www.google-analytics.com/collect?v=1&
    tid=UA-XXXXXX&t=event&cid=*|UNIQID|*&cn=hellridecase&
    cs=email&ec=blogemail&ea=open" width=1 height=1>

    Вращающиеся изображения (rollover)
    .img-swap:hover .tpixel{
    background-image:url(http://www.google-analytics.com/collect?v=1&
    tid=UA-XXXXXX&t=event&cid=*|UNIQID|*&cn=hellridecase&
    cs=email&ec=blogemail&ea=interact&el=rollover);
    }

    Карусель: Это не сработает в MailChimp, поскольку он не поддерживает некоторые элементы, такие, как радиокнопки
    .radio2:checked ~ .carousel .tpixel{
    background-image:url(http://www.google-analytics.com/collect?v=1&
    tid=UA-XXXXXX&t=event&cid=*|UNIQID|*&cn=hellridecase&
    cs=email&ec=blogemail&ea=interact&el=radio2_select);
    }
    .radio3:checked + .carousel .tpixel{
    background-image:url(http://www.google-analytics.com/collect?v=1&
    tid=UA-XXXXXX&t=event&cid=*|UNIQID|*&cn=hellridecase&
    cs=email&ec=blogemail&ea=interact&el=radio3_select);
    
    }

    Открытия с мобильных
    <style>
    @media screen and (max-device-width: 600px) {
    .mobile-pixel{
    background-image: url(http://www.google-analytics.com/collect?
    v=1&amp;tid=UA-XXXXXX&amp;t=event&amp;cid=*|UNIQID|*
    &amp;cn=hellridecase&amp;cs=email&amp;ec=blogemail
    &amp;ea=client-type&amp;el=mobile);
    }
    }
    </style>
    <div class="mobile-pixel"></div>

    Тестируем пиксель
    Одна из классных функций Google Analytics — возможность отслеживать события в реальном времени. Так вы можете моментально проверить, правильно ли настроены ваши пиксели. Для проверки вы можете отправить тестовое письмо или открыть html файл письма в браузере, и ваши события появятся в отчётах в реальном времени. Попасть в эти отчёты вы можете из левого меню: В режиме реального времени — События. Клик по отчёту «События за последние 30 минут» даст вам возможность увидеть полное количество событий по каждому действию за последние полчаса.

    c04afeff0a3d4bc28340c883629243e7.gif

    В отчёте вы можете заметить, что задержка между действием и срабатыванием события очень мала. Также обратите внимание, что из-за того, что пиксель, загрузившись один раз, больше не срабатывает, пока вы не обновите страницу, активация события по вращающемуся изображению во второй раз не запишется.`

    Отчёты

    Тут начинается самое захватывающее. Вы можете зайти в отчёты по событиям в Google Analytics Поведение — События — Лучшие события. Там вы увидите все события, разбитые по категориям. Кликаем на kinetic и видим действия по событию как на скриншоте ниже:`

    Вы можете видеть Все события и Уникальные события. Все события — сколько раз пиксель был загружен.

    Однако уникальные события это не количество уникальных пользователей, действие которых спровоцировали запись события. Уникальные события показывают количество сессий, в которых событие сработало. Например, если один и тот же пользователь открыл письмо 10 раз за три дня, то Все события будут показывать 10, а Уникальные — 3, но не 1. Google Analytics начинает считать сессию как новую, если пользователь был неактивен в течение получаса. Посмотрите эту статью для большей информации.
    Ответ написан
    Комментировать
  • Какие технологии нужны для полноценного SPA?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Если нужен серверный рендеринг (например для сео или ускорения первичной загрузки), то тут однозначно придется использовать node.js
    Для всего остального бэк может быть любым
    БД выбирается под данные и то, как Вы с ними будете работать
    Общение между фронтом и бэком лучше организовать через websocket
    Ответ написан
    Комментировать
  • Порекомендует план обучения ngnix или как поднять веб-сервер?

    zorca
    @zorca
    EasyEngine и ДВЕ команды:

    wget -qO ee rt.cx/ee && sudo bash ee # install easyengine
    sudo ee site create example.com --wp # install wordpress on example.com


    Сайт с PHP 5.6 и мускулом:
    ee site create example.com --mysql


    С PHP7.0:
    ee site create example.com --mysql --php7
    Ответ написан
    Комментировать
  • Порекомендует план обучения ngnix или как поднять веб-сервер?

    Sanes
    @Sanes
    C Ansible надеюсь разберетесь? Внизу ссылка на исходники.
    Ответ написан
    Комментировать
  • Var activation = x => x >= .5? 1: 0; - Переведите на Русский?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Это то же самое, что:
    function activation(x) {
      if( x >= 0.5) {
        return 1;
      } else {
        return 0;
      }
    }


    Подробнее посмотрите про стрелочные функции и тернарный оператор.
    Ответ написан
    Комментировать
  • Как включить поддержку HTML тегов в письме?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Письма, в которых есть только HTML с большой вероятностью попадают в спам (в SpamAssassin - правило MIME_HTML_ONLY). Создавайте multipart-письмо, в котором будут и HTML и plain, желательно чтобы и текстовое содержимое частей совпадало.
    Ответ написан
    Комментировать
  • Как правильно верстать с помощью bootstrap?

    @selo
    shoelace.io Здесь удобно собрать блоки и сбоку будет готовый код
    Ответ написан
    Комментировать