• Как сделать так, чтобы на каждой статичной странице была возможность добавления картинки и текста с левой стороны, а заголовок и текст с другой?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Не использовать query_posts
    2. Откуда берется контент для правой и левой колонок, где он хранится и в каком виде? Схематически покажите архитектуру.
    3. Если я правильно понимаю, вам нужно вывести объект "Портфолио", у которого сллева будет логотип/скрин, под ним какое-то описание, а справа - стандартные поля the_title и the_content/the_excerpt, так?

    Ответите на эти вопросы - помогу с кодом.
    Ответ написан
    4 комментария
  • На какую cms лучше перенести сайт с wordpress?

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

    Причин тому нескольлко:

    - Далеко не все плагины работают со всеми темами прямо из коробки, это нормально, так и должно быть. Часто нужно закатать рукава и дописать что-то в код шаблонов.
    - Конфликты плагинов случаются крайне редко, если вы сталкиваетесь с этой проблемой часто - вы что-то делаете не так.
    - Обе проблемы были, есть и будут на любой платформе, но и на любой другой платформе этого будет в разы больше.
    - Экосистема WP самая большая, кроме того, WP больше других платформ озабочен обратной совместимостью. Этого всего нет у Джумлы и других CMS.
    - Другие CMS вам вряд ли подойдут, так как вам требуется не инструмент для разработчика, а конструктор. Посему, у вас вариантов нет, только WordPress или онлайн-конструкторы типа Wix, Squarespace. Но там свободы в разы меньше.

    Я бы вам предложил просто начать более углубленное изучение WordPress. Задавать здесь конкретные вопросы по конкретным ситуациям "несовместимости" и "отсутствия поддержки". Мы поможем.

    WordPress - лучшая из доступных CMS. Говорю это со знанием дела, как человек, который на базе WordPress разрабатывает целые SaaS-платформы и сложные инструменты. Мощнее только фреймворки - Laravel, Symfony и тд, но это точно не ваш путь, по крайней мере пока.
    Ответ написан
    Комментировать
  • Почему Wordpress после Ajax запроса возвращает 0?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У вас проверка nonce не проходит, потому что путаница с названиями переменных - и my_ajax, и php_array и тд. Почитайте документацию или вот тут.
    Ответ написан
    Комментировать
  • Возможно ли к сайту одностраничнику на AngularJS прикрутить wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Именно для этих целей создали WP REST API, которое уже вот-вот готово к включению в ядро WordPress, скорее всего войдет в релиз 4.4 в декабре этого года.

    wp-api.org
    Ответ написан
    Комментировать
  • Есть ли такой плагин для WP?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    А зачем в этом случае пагинация, зачем изобретать какой-то велосипед? Вам нужен Infinite Scroll. Например, он есть в Jetpack. Есть еще с десяток плагинов минимум.
    Ответ написан
  • Пробовали ли Вы конструктор для сайтов (WP)?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Их много, минимум полторы дюжины. Кто-то использует, кто-то делает руками. Вопрос, как и с любым другим инструментом, должен стоять так - "а есть ли смысл использовать Х в этом конкретном проекте". И ответ на этот вопрос зависит от конкретного проекта.
    Ответ написан
    Комментировать
  • Под сетку вордпрессов какой сервер нужен?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    RAM - от 2Gb
    CPU - от 2х ядер
    SSD - обязательно
    Канал - чем толще, тем лучше :)

    На таком железе WordPress Multisite будет прекрасно шуршать с десятками сайтов, если на них не гонять трафик рекой. Если же нагрузка вырастет - придется масштабировать сервер, что вполне нормально.

    Ну а если вместо Apache + PHP использовать Nginx + PHP-FPM (версии 5.5.9+ чтобы родной OPcache был ), да еще добавить Memcached/Redis, а MySQL заменить на MariaDB10 - шуршать будет заметно веселей, выдерживать значительно большие нагрузки. А еще можно за Nginx'ом PHP-FPM оставить исключительно как fallback, а перед ним поставить HHVM. Это еще ускорит в разы. Ну а чем быстрее сервер работает и большие нагрузки выдерживает - тем больше сайтов на него можно повесить или больше трафика гнать. То есть, заметно отодвинуть момент апгрейда железа и сэкономить себе немного денег на пиво, детям на конфеты и жене на цветы. Если грамотно подтюнить все упомянутые компоненты, то еще и на презервативы хватит.
    Ответ написан
    Комментировать
  • Баг с картинками в wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Прикол в том, что использовать query_posts() категорически не рекоммендуется, я уже устал это повторять, если честно. Почитайте документацию, поймете, что это вполне ожидаемый результат при использовании этой функции и забудьте про нее, считайте, что ее не существует. Есть WP_Query, get_posts(), get_post().
    Ответ написан
    Комментировать
  • Как сделать разные страницы для разных авторов (wordpress)?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    А что должно быть на странице автора? Если речь о странице архива автора, то у вас в body будут прописаны классы author author-{name}. Цельтесь стилями через этот последний селектор.
    Ответ написан
    3 комментария
  • Как увеличить скорость загрузки сайта wordpress на VPS/VDS?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вам же гугл сказал все - 550мс ответ сервера. Это и есть узкое место. Сервер принимает запрос, делает что-то свое, форвардит на PHP, тот поднимает весь WordPress, тот неоднократно лезет в базу данных, потом данные обрабатывает, генерирует html и возвращает их серверу, который отправляет в браузер. Оптимизуйте так:

    - SSD
    - Удаляем Apache и забываем как страшный сон
    - Nginx, отключить все ненужное логирование, оптимизировать настройки (буферы, keep-alive и тд), gzip, кеширование статики на стороне клиента и адекватное время жизни кеша
    - PHP5-FPM версии 5.5.9 и выше с встроенным OPcache, оптимизировать настройки
    - кеширующий бекенд (Memcached / Redis)
    - MariaDB вместо MySQL (пошустрее будет) - погоняйте неделю-две в дефолтном конфиге, потом тюнить по результату (кеши в основном)

    Далее на уровне самого WordPress:

    - плагин для объектного кеширования (Memcached / Redis)
    - Fast Full Page Cache или аналог (не используйте тяжелые WP Super Cache / W3 Total Cache) для кеширования страниц целиком
    - минификация и конкатенация скриптов и стилей

    Есть еще и хардкор для настоящих мужчин:

    - HHVM с фоллбеком на PHP
    - Nginx fastcgi_cache
    - Кастомная сборка Nginx с модулем nginx_memcached, чтобы PHP вообще не поднимать без острой надобности
    - Nginx SPDY
    - и так далее...

    Ну и, конечно же, сам сайт надо рефакторить - и верстку, и функционал. Удалить ненужные плагины, где можно обойтись одним фрагментом кода вместо целого плагина - обходиться.

    Удачи :)
    Ответ написан
    3 комментария
  • Как в wordpress задать и вывести доп.поля у записи?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Задать вручную через произвольные поля (включите их отображение на странице редактирования поста), либо с помощью плагина Advanced Custom Fields (или аналогичного).

    Для вывода в первом случае используем
    echo get_post_meta( $post->ID, 'название_поля', true ) // true или false в конце говорит выводить единственное значение или все (если значений несколько)


    Если использовать ACF, то у него свои функции
    get_field(); // получить значение
    the_field(); // вывести значение


    Прелесть плагинов типа ACF в том, что они дают нормальный интерфейс для полей и возможность использовать разные типы полей. Ну и, конечно же, гибкие правила где и когда эти поля выводить.
    Ответ написан
    1 комментарий
  • Как правильно администрировать VPS?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ни в коем случае не ставить никаких ISP Manager / Vesta / CPanel, иначе никогда не научитесь тому, чему хотите научиться. Кроме того, они жрут ресурсы. Даже Vesta, которая самая легкая, их жрет прилично, а я сильно сомневаюсь, что у вас VPS c 8+ Gb памяти.

    Изучать надо по урокам и статьям, читая мануалы и best practices по каждому package. Порядок, плюс-минус, таков:

    - развернули ось
    - сделали сразу апдейты
    - создали и настроили swap
    - поменяли пароль рута на что-нибудь супер-мега-сложное (его мы использовать все равно не будем)
    - создали себе обычного юзера с паролем нормальной сложности (он будет использоваться для sudo)
    - дали юзеру права sudo
    - закрутили гайки по SSH - сменили порт, запретили вход руту и вход по паролю (только по ssh-ключам), разрешили вход только одному своему новому логину
    - настроили UFW - простой, но эффективный firewall на основе iptables - default deny, allow http, https, свой кастомный ssh-порт. Если логиниться будете только из нескольких мест (офис, дом) - можно вообще ssh разрешить только на эти IP.
    - sudo dpkg-reconfigure tzdata чтобы установить свою временную зону, так логи потом легче читать и понимать
    - настроили logrotate
    - настроили logwatch
    - настроили Postfix, чтобы сервер вам письма мог слать (мы его настраиваем на внешний мейлер, например Mandrill, чтобы все письма точно в спам не падали)
    - настроили fail2ban (потом, после установки и настройки веб-сервера и сайтов, в fail2ban можно дополнения писать, например мы на WordPress-сайтах мониторим попытки авторизации в админку и блочим тем же fail2ban)
    - дальше ставим все что нужно - Git, Nginx, HHVM, PHP5-FPM, MariaDB, Memcached/Redis и так далее.

    Регулярно заходите на сервер, делайте apt-get update && apt-get dist-upgrade.

    p.s.: это по ubuntu/debian, для других систем все то же самое, но packages и команды могут немного отличаться
    Ответ написан
    26 комментариев
  • Паттерны для написания плагинов Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если плагин простенький - обычный функциональный паттерн. Если чуть сложнее - одним файлом с одним классом. Если что-то сложнее - уже упомянутый WordPress Plugin Boilerplate (оф. сайт)
    Ответ написан
    Комментировать
  • Как подключить слайдер контента в landing шаблон на Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    в настройках шаблона всё жёстко закреплено и можно выводить только то, что есть в нём по дефолту

    Добро пожаловать в мир "универсальных тем на все случаи жизни с 1001й настройкой", которые в реальности ни разу не гибкие. В вашем случае - это премиум-шаблон. Стучитесь в поддержку к разработчикам, вы за это деньги заплатили.
    Ответ написан
    Комментировать
  • Ошибка в WooCommerce с русским языком, как исправить?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Cyr 2 Lat enhanced пробовали использовать? Кириллические символы в урл - нехорошо.
    Ответ написан
    4 комментария
  • Как в WP сгенерировать миниатюру с первого изображения в галерее в посте?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    WP генерит все размеры для изображений (в том числе и миниатюры) при загрузке. То есть, если картинка уже у вас вставлена в галерею в пост - миниатюра к тому времени давно сгенерирована. Вопрос в том, как ее получить. А это совсем не сложно:
    if( ! has_shortcode( $post->post_content, 'gallery' ) ) :
        $images = get_post_gallery_images( $post );
    endif;

    Теперь в переменной $images у вас массив URL всех изображений в галерее. Как вытянуть первое, думаю, понятно. Как получить нужный размер - тоже.
    Ответ написан
    1 комментарий
  • Безопасно отправлять результат wp_signon в открытом виде?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Как говорится в WP комьюнити, you're doing it wrong :)

    wp_signon() возвращает объет WP_Error или WP_User (в случае неудачи или успешной авторизации соответственно). Если они вам не нужны в полном виде (а они таки не нужны в 99,99% случаев) - зачем вообще их возвращать? Проверяйте в обработчике, если это WP_Error - берите его, вынимайте саму ошибку и отправляйте ее через wp_send_json_error() (дока). Если пришел объект WP_User - берите из него что нужно (например, display_name) и возвращайте данные через wp_send_json_success() (дока). Для дальнейшей работы с данными пользователя у вас уже будет доступ к объекту WP_User через функцию wp_get_current_user() (дока).
    Ответ написан
    Комментировать
  • Как вычислить ошибку WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если XDebug для вас - слишком сложно, то установите хотя бы плагины для WP - Query Monitor и Log Deprecated Notices. Как можно дебажить вслепую..
    Ответ написан
    Комментировать
  • Вопрос по wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Да не нужна вам тут никакая соцсеть. Несколько обычных custom post types хватит. Pages - остается по умолчанию, Posts - новости компании/проекта. Создаете cpt User_Posts - это блоги пользователей (владельцев франшиз). Создаете cpt Franchise - это, собственно франшизы. Для юзеров создаете 2 новые роли (или модифицируете существующие) - User и Owner, например. User - обычный зарегистрированный пользователь сайта, без особых прав - может лайкать, подписываться, оставлять комментарии и отзывы. Owner - может публиковать User Posts и Franchises, редактировать их, видеть статистику по ним.

    Если доступ в админку (с ограничениями по ролям, конечно же) устраивает - на этом основа готова. Если в админку пускать не хотите - делаете еще кастомные страницы регистрации и авторизации, личный кабинет и страницы + формы для добавления/редактирования контента на фронтенде. И для того, и для другого есть хорошие плагины - бесплатные и платные. Лично я раньше фронтенд-формы руками пилил, теперь только с помощью Ninja Forms и нескольких платных плагинов к нему.
    Ответ написан
    6 комментариев