• Как завести бесплатный хостинг с bash для обучения?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Vagrant
    Ответ написан
    Комментировать
  • Какие есть бюджетные сервисы, которые можно использовать для хранения данных (>= 1 ТБ)?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Amazon S3
    Ответ написан
    Комментировать
  • Как безопасно перейти PHP с 5.2 на 5.5?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Попробуйте Travis CI.
    Ответ написан
    Комментировать
  • Fix очень мелких багов в чужой open source библиотеке, как лучше сделать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Создать issue с описанием проблемы и в нем овзучить что сделаете правку сами.
    2. Форкнуть репу себе.
    3. Клонировать форк на комп.
    4. Создать отдельную ветку и переключиться в нее, внести правки.
    5. Закоммитить правки и запушить.
    6. Создать Pull Request, указать что closes #ISSUE_ID.

    Вносить правки лучше в отдельной ветке (feature branch). За время работы или между отправкой PR и его принятием код в основной ветке может поменяться. А по правилам неписанного хорошего тона PR должен чисто мерджиться, и это задача контрибютора. Владелец репы не должен резолвить конфликты.
    Ответ написан
    Комментировать
  • Как отображать поле только тогда, когда оно заполнено?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    $cur_terms = get_the_terms( $post->ID, 'genres' );
    
    if( $cur_terms && ! is_wp_error( $cur_terms )  ) {
    
        $array = array();
    
        foreach( $cur_terms as $cur_term ) {
            $array[] = $cur_term->name;
        }
    
        $comma_separated = implode( ", ", $array );
        echo '<div>Жанры: ' . esc_attr( $comma_separated ) . '</div>'; // term1, term2, term3
    
    }
    Ответ написан
    Комментировать
  • Почему github, а не gitlab?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если уж сравнивать разные сервисы, то стоит расставить их в порядке популярности:

    1. GitHub
    2. BitBucket
    3. GitLab

    Немного подробнее:

    1. GitHub

    + большое комьюнити, по сути сначала ищем что-то на гитхабе, и лишь потом гуглим (если там не нашли, что редко)
    + самая богатая интеграция сторонних сервисов
    + удобство "все в одном месте" - и свои проекты, и весь мировой опенсорс, который спокойно форкаем, контрибютим
    + активный акк на гитхабе - лучше любого резюме, как уже писали
    + свои опенсорс-проекты на гитхабе имеют большой шанс быть замеченными

    - в бесплатном акке нет приватных репо
    - аккаунт организации создается из аккаунта юзера, не совсем удобное управление

    Обновление от мая 2020: бесплатные приватные репозитории давно есть, управление командами/организациями сильно улучшилось + появился еще целый вагон фич.

    2. BitBucket

    + неограниченное количество приватных репо бесплатно
    + аккаунт компании - виртуальный, легче и удобнее управлять
    + куча сторонних интеграций тоже, но меньше чем GitHub

    + / - интеграция с продуктами Atlassian (например, Jira) - кому-то огромный плюс, кому-то минус. Битбакет популярен на западе у энтерпрайзов

    3. GitLab

    + бесплатные приватные репо
    + self-hosted версия (но это уже из другой оперы)

    - самый молодой, совсем юный, есть баги, функциональность еще бедная и не выпилена
    - мало внешних интеграций

    Обновление от мая 2020: Функциональность GitLab давно уже нельзя назвать бедной - в некоторых аспектах они и GitHub превзошли.
    Ответ написан
    2 комментария
  • Верен ли подбор плагинов для построения большого проекта на WP?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Мультиязычность интерфейса
    Как я понял тоже реализуется через WP Multisite

    Это реализуется самим ядром WP.

    Региональность сайта (site.ru/spb или spb.site.ru)
    WP Multisite
    Мультиязычность статей
    Через Polylang

    Это два разных подхода для решения одной и той же задачи. WP Multilingual использует механизм WP Multisite - каждая языковая версия это отдельный сайт сети. Переводы, собственно говоря, это отдельные посты в этих отдельных сайтах. Линкуются между собой именно с помощью этого плагина. Polylang - это плагин для мультиязычности в рамках одного сайта. Выберите что-то одно. Плюсы Multisite - полностью автономные локальные версии, гибкость в работе. Минусы - дублирование медиафайлов (хотя есть обходной хак). В вашем случае, Multisite вполне вероятно будет оптимальным вариантом.

    Кастомные поля
    Advanced Custom Fields 5 Pro

    Отличный выбор, сами пользуемся, всем рекоммендуем.

    1) Можно ли через кастомные поля задавать логику поведения? Например есть поле ID, в него в админке заносится переменная, на основе нее выполняется API запрос и получаем при заходе на страницу данные которые вернул API? Логика может быть разной, в зависимости от категорий/рубрик статей.

    Да, в ACF Pro есть conditional logic. На выводе в теме в любом случае немного покодить придется, независимо от решения.

    2) Есть ли разделение прав пользователей? Например копирайтерам доступны только свои статьи, редакторам - все, администраторам - настройки системы.

    Да, именно так и работает, это базовая функция WP. Для тонкого управления ролями и правами, созданием новых есть плагины, мы используем много лет User Role Editor.

    3) Интеграции дополнительных решений - условно, если мы захотим на базе WP построить свой интернет магазин, и мы точно знаем, что ни одно готовое решение под него не подойдет, насколько затратно по деньгам и времени будет подобное внедрение? Страницы будут обладать своей логикой, своими полями в базе данных, которые нужны в рамках этой задачи.

    Настолько же затратно и геморно, как и любое другое решение. WP - это кучка PHP-файлов, среди которых - пачка низкоуровневых API для работы с файловой системой, HTTP, БД и тд (по сути - фреймворк). В декабре в версии 4.4 появится также JSON REST API. В целом, WP благодаря этим АПИ и хукам - очень гибкая штука, которую можно скрестить с чем угодно. Что касается конкретно коммерции - WooCommerce, Easy Digital Downloads. Не знаю еще задач, под которые не подошел бы WooCommerce, который в своей гибкости ничем не уступает самому WP. А не так давно WooCommerce был приобретен компанией Automattic, которая (с некоторыми оговорками) стоит за всем проектом WP. Так что со временем будет только лучше. Ну и цифры говорят сами за себя - 30% всех интернет-магазинов в интернете работают на WooCommerce.

    4) Организация e-mail/sms рассылок с разными шаблонами в рамках пользователей системы

    Без проблем. Есть масса плагинов, как для работы с рассылками нативно (внутри WP), так и через интеграцию со сторонними сервисами, например MailChimp. Также, есть смысл упомянуть, что в WP легко подключается и настраивается сторонний сервис для транзакционных писем, например Mandrill.

    5) Гибкость работы в рамках одного URL
    Условно первые пол года по URL будут статьи, затем статьи перезжают на другой адрес URL при этом URL самих статей не меняются. А на месте уже "старого" URL разворачиваем кастомный каталог. Насколько это легко реализуется в рамках WP?

    Реализуемо. В WP встроена своя система внутренних редиректов, есть плагины.

    Если будут другие вопросы - обращайтесь. Опыт разработки крупных кастомных проектов (в том числе SaaS-платформ на базе WP) есть, за 10 лет работы по плагинам и кастомному коду хорошо разобрались :)
    Ответ написан
    7 комментариев
  • Как настроить плагин на WP Contact Form7?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Проверьте по списку возможных причин contactform7.com/why-isnt-my-ajax-contact-form-wor...
    2. Проверьте консоль в браузере, вероятно есть javascript ошибки, из-за которых не работает как надо
    3. Как fancybox реализован? Есть для этого плагин.
    4. Почитайте:
    Как заставить работать Contact Form 7 и Easy FancyBox?
    Contact form 7 + popup почему перегружается страница?
    Ответ написан
  • Как добавить css класс к продукту WooCommerce?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Самый правильный вариант:

    <?php post_class( 'col-sm-6' ); ?>

    Ну хоть иногда читайте документацию и не занимайтесь ерундой.
    Ответ написан
  • Как получить содержимое постов в wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Зачем это?
    $content = apply_filters('the_content', $content);
    2. Используйте:
    $args = array(
        // параметры
    );
    $schedule = new WP_Query( $args );
    if( $schedule->have_posts() ) :
        while( $schedule->have_posts() ) :
            $schedule->the_post();
            // здесь вывод уже как в обычном лупе - the_title(), the_content() и тд.
    endif;
    wp_reset_postdata();
    Ответ написан
  • Как изменять цвет из админки wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    https://codex.wordpress.org/Theme_Customization_API
    https://developer.wordpress.org/themes/advanced-to...

    А вообще, для начала скачайте тему _s на GitHub или через конфигуратор и изучите ее содержимое. Это отличный материал для обучения. Также, не помешает посмотреть стандартные темы, включая новую Twentysixteen (текущая свежая версия на GitHub).
    Ответ написан
    Комментировать
  • Как использовать функции woocommerce?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Так же, как и функции WordPress. Разумеется, если под функциями вы имеете в виду template tags. Например:
    <?php woocommerce_login_form(); ?>
    Обратите внимание на разницу между вашим примером и моим. Имя функции, потом скобки, и обязательно точка с запятой. Почитайте про основы PHP, синтаксис. Функции WooCommerce (как и WP) - это обычные функции, написанные на языке PHP и должны соответствовать его синтаксису.

    ЗЫ: Обычно, если в имени функции есть слово get, это означает, что данная функция не выведет на страницу то, что вы ожидаете, а лишь вернет значение, которое можно далее использовать, например:
    <?php echo get_terms(); ?>
    Этот код принудительно отправит результат выполнения функции на вывод. Или же:
    <?php 
    $terms = get_terms(); // сохранили результат
    echo $terms; // выводим его или делаем что-то еще
    ?>
    Ответ написан
    Комментировать
  • Повлияет ли на скорость загрузки обновление Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Зависит какая версия стоит сейчас, какие плагины, какой серверный стек. В целом, WordPress будет летать шустрее на нормальном сервере при отсутствии кривых плагинов и тем. Да, сам код WP со временем разрастается, но также и оптимизируется.

    Что касается обновления в принципе - делать обязательно. Вообще, лучше всего работать на самой свежей версии. Исключение - прям вот только вышедшая версия. Можно недельку-другую подождать перед обновлением, вдруг какой-то баг всплывет (часто бывает). А еще лучше - иметь staging или хотя бы локальную копию сайта и тестировать ее с новой версией WP когда она еще в режиме Beta (обычно минимум за месяц до выхода релиза).
    Ответ написан
    Комментировать
  • Как секьюрно задать права на каталоги?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ответ на StackOverflow правильный.

    Для файлов нужны права 644, что означает:

    Владелец - чтение, запись
    Группа - чтение
    Все - чтение

    Для директорий 755, что означает:

    Владелец - чтение, запись, выполнение
    Группа - чтение, выполнение
    Все - чтение, выполнение.

    Дополнительный бит для директорий нужен, потому что без права на выполнение вы не сможете директорию открыть. Именно X позволяет открывать файлы внутри директории.
    Ответ написан
    Комментировать
  • Какую CMS выбрать для большого проекта?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Я, как проповедник WordPress, постараюсь быть максимально осторожен. WP - потянет. Если вам надо именно максимально быстро начать. Для мультиязычки в вашем контексте лучше всего Multisite, есть хороший платный плагин под это дело - не скупитесь, берите. Для полей и метаданных - Advanced Custom Fields 5 Pro. Также, платная версия, не скупитесь. Еще по ходу возникнет необходимость в других, более мелких плагинах. В целом, сделать можно.

    Но! Учитывая, что живем мы в реальном мире, где не все так гладко (и, как подсказывает опыт, обычно все очень-очень неровно), вангую необходимость многое допиливать / перепиливать под себя. Это все реально, и можно сделать качественно и под себя на WP, но объем работ будет немалый, сложность тоже на уровне. Соответственно, реальная стоимость разработки и дальнейшей поддержки выйдет весьма круглая. ИМХО, в таком случае лучше писать под себя на какой-нибудь Laravel. Либо, идеальный вариант, сначала собрать по-быстрому на WP и парочке платных плагинов, загрузить редакторов работой, собирать все замечания / правки / пожелания и тд. И параллельно писать с нуля свою платформу, учитывая параллельный реальный опыт.
    Ответ написан
    8 комментариев
  • Откуда сортировка в $wp_query или как её отключить?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Крил: боже упаси такой код использовать, у вас там sql-injection! Я уж молчу про опасный output. Это раз. Два - прямой коннект в БД и низкоуровневый sql-запрос внутри среды WP - полный кретинизм. Три - читайте про хуки. У WooCommerce (и у WP) масса полезных для таких задач событий и фильтров.

    Сделайте шаг назад, избавьтесь от этого дырявого говнокода. Поставьте четко задачу. Тогда можно будет сделать все правильно.

    ЗЫ: По приведенной вами ссылке код нормальный, а у вас получился кошмар.
    Ответ написан
  • Передача сайта на доработку в чужие руки - как не "попасть"?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Йолки ж палки. Никто в своем уме не дает доступ к production кому попало. Для таких задач есть системы контроля версий и staging. Если это суперсложно - фрилансеру даете дамп базы и копию сайта (или ссылку и права на Git-репу), он разворачивает у себя development-копию, делает правки, коммитит в Git / шлет вам архив / показывает на своем сервере. После утверждения работ переносите правки к себе.
    Ответ написан
    Комментировать
  • Комментарии к записях через соц. сети и сам Wordpress в одном потоке?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Используйте WordPress Social Login для авторизации через соцсети и родные комментарии WP.

    Задумка вставить виджеты соцсетей и потом собирать все комменты вперемешку - бредовая изначально. Хотя, в целом, реализуема - кроном дергаете соцсети и импортируете комменты к себе, фиксите по датам и сортировку свою делаете. Но, повторюсь, затея бредовая по своей сути.
    Ответ написан
    Комментировать
  • WP Google Map Lightbox при нажатии на ссылку?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Плагинов для карт много, +1 к ответу Данила (хотя это далеко не полный список). Если же какой-то из плагинов подходит по всем параметрам, но не открывается в "лайтбоксе" - вручную интегрируйте Magnific Popup, это лучший скрипт для попапов любого формата и типа.
    Ответ написан
    Комментировать
  • Данные из json в посты WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    WP REST API. В декабре 2015 выходит версия WordPress 4.4, в нее уже будет включена основа этого API, к апрелю 2016 (версия 4.5) будет полный перенос в ядро. Проект стабилен, можете смело использовать на продакшне.
    Ответ написан
    Комментировать