Ответы пользователя по тегу WordPress
  • Как дать клиенту прямую ссылку на покупку через WooCommerce?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Грубо:
    function prefix_automatically_add_to_cart()
    {
    	// Сначала решите как будете передавать ID товара - через 
    	// GET в ссылке, через кастомный rewrite, POST, куки и тд.
    	// Далее, здесь получаете этот ID, в зависимости от решения выше.
    	$product_id = 1;
    
    	if ( WC()->cart->get_cart_contents_count() === 0 ) {
    		// Програмно добавляем товар в корзину
    		WC()->cart->add_to_cart( $product_id );
    
    		// Переадресовываем на корзину (или чекаут)
    		wp_redirect( WC()->cart->get_cart_url() );
    		// wp_redirect( WC()->cart->get_checkout_url() );
    		
    		die;
    	}
    }
    add_action( 'template_redirect', 'prefix_automatically_add_to_cart' );
    Ответ написан
    2 комментария
  • Theme check выдает ошибку get_post_format and/or has_post_format как исправить?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Theme Check не говорит что тут ошибка, он как бы спрашивает WTF?! - вы декларируете поддержку Post Formats с помощью add_theme_support(), но в реальности нигде их не используете. Таким образом он вам как бы намекает - либо крестик снимите, либо трусы оденьте.

    Добавьте реальные Post Formats в код темы:

    - определение формата в Loop при выводе записей функциями has_post_format() и get_post_format()
    - модификация вывода в зависимости от формата (или назначение кастомного CSS класса)
    - добавьте CSS стили для этих кастомных классов

    Либо уберите их поддержку. Потому что сейчас вы врете потенциальному пользователю/покупателю - говорите что есть поддержка, но самой поддержки на самом деле нет.
    Ответ написан
    Комментировать
  • Как убрать дубли страниц с непонятными цифрами в конце URL в Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вот отсюда начните:
    https://perishablepress.com/wordpress-infinite-dup...
    Ответ написан
    Комментировать
  • Как скрыть логотип ВК на Англо-язычном сайте?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    "Англоязычность" сайта у вас наверняка определяется на уровне WordPress/PHP, так что и скрывать логотип имеет смысл там же. То есть, возвращать с сервера страницу вообще без этого логотипа, а не костылями JS/CSS пытаться скрыть его присутствие.

    Ну а как конкретно это сделать - зависит от того, каким плагином / методом у вас реализована многоязычная поддержка. Обычная проверка:

    // Спрашиваем у плагина какой текущий язык
    $current_language = some_plugin_function_to_get_current_language();
    
    if ( $current_language !== 'en' ) {
        // Вывод кнопки ВК
    }
    Ответ написан
    Комментировать
  • Как отредактировать create_function() в wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Анонимная функция:

    $conditional_function = function() {
        return cherry_condition($options_type[$id], $options[$id], $users[$id]);
    }
    $conditional_result = $conditional_function();
    Ответ написан
    Комментировать
  • Как закэшировать отдельный шаблон wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вам понадобится посмотреть код плагина кеширования и найти то место, где можно включиться и помочь ему понять, что если wp_is_mobile() у нас true, то берем (или создаем и берем) мобильный кеш, если false - десктопный. Если используется их метод кеширования через mod_rewrite, то и настройки этих rewrite надо будет подкрутить, на уровне сервера определяете desktop/mobile.

    В описании плагина есть:

    8. Enable/Disable cache option for mobile devices


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

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Посмотрите нет ли в консоли браузера javascript-ошибок. Если ошибки есть, то скрипты могут не работать. А разворачивается панелька скриптами.
    Ответ написан
    Комментировать
  • Как настроить обновления вебсайта на Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если вопрос еще актуален, смотрите мой ответ вот в этой теме. Кое-что полезное о процессе сможете почерпнуть.

    Если кратко - забудьте про всякие ftp и прочий олдскул. Работаете локально, коммитите и пушите в нужную ветку. Дальше на стороне удаленного репозитория (GitHub, Bitbucket, Gitlab) происходит вся магия, с которой нужно разобраться единожды как настроить (Travis CI, Jenkins, Bitbucket Pipelines и тд). Запушили в ветку develop - автоматом собралось, протестилось и залилось на staging. Смерджили в master - залилось на прод. Дополнительно пишете скрипты для автоматизации остальных действий (синхронизация БД, медиа-файлов и еще бог знает чего - зависит от проекта и задач).
    Ответ написан
  • Как вывести текст из поля?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У функций the_field() и get_field() есть второй, необязательный парамент - ID объекта, с которого брать нужное поле. Если его не указывать - берется с текущего объекта. Если нужно взять с другого - указывайте нужный ID явно. Для страниц настроек, таксономий, терминов, юзеров и тд там свой формат для этого ID. Все это есть в официальной документации плагина:

    https://www.advancedcustomfields.com/resources/get... (раздел Get a value from different objects)
    https://www.advancedcustomfields.com/resources/add...
    Ответ написан
    7 комментариев
  • Криво отображаемый Wordpress и Haproxy reverse proxy?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если я правильно понял задачу, то я бы на Apache / Nginx сервера с самим WP который слушает 80й порт ловил запросы с https:// в урл и перезаписывал их в http://. Но честно говоря хз, не уверен что WP согласится на такую схему. Подобная связка у меня с CloudFlare, но трафик между CF и моим сервером тоже https, поэтому проблем не возникает. С haproxy экспериментировал, но никогда не работал в проде, поэтому не сталкивался с такой проблемой.
    Ответ написан
    Комментировать
  • Чувствуется ли избыток специалистов по разработке на WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Специалистов катастрофически не хватает. Всякого сброда, который умеет в конструкторы и немножко говнокода по тюториалам - пруд пруди, именно эта категория имплементаторов создает видимость перенасыщения рынка. Впрочем, для них работы тоже хватает, вот только зарабатывать 50-60к на этой работе вряд ли получится - там бюджеты копеечные. А нормальные бюджеты - они только на западе, плюс там уже требования другие, и вот как раз там требуются специалисты. Которых очень мало. И зарабатывают они все заметно больше чем 50-60к. Но это не простенькие плагины и не темы. Это полностью кастомные решения, чаще всего под ключ, или же узкоспециализированные плагины, требующие опыта и знаний. Ну и ecommerce, там просто много работы и нужно хорошо понимать специфику.

    И еще важный момент - опытные разработчики-фрилансеры понимают пользу поддержки своего кода после начальной разработки. Если хотите на фрилансе зарабатывать нормально, оставляйте клиентов на дальнейшую поддержку. С каждого такого клиента по копейке ежемесячно - уже стабильная "зарплата". А там где есть поддержка чаще всего есть более-менее регулярные допработы которые биллятся отдельно.
    Ответ написан
    Комментировать
  • Как изменить ссылку для восстановления пароля?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Во-первых, ссылка должна приходить /wp-login.php?action=lostpassword, а не wp-admin.

    Что касается изменения этой ссылки - можете поискать плагины в репозитории, они есть. Если вы не разработчик, который понимает что делает, сами не пытайтесь "написать" эту фичу основываясь на ответах на Тостере - здесь есть ряд вопросов по безопасности, которые нужно досконально понимать. Кратко - встроенная система (wp-login.php) блокируется, вместо нее создаются свои rewrite rules, им отдаются нужные templates, в которых размещены свои формы, у которых есть свои обработчики. Или, вместо rewrite rules используются страницы, созданные в админке, а в их шаблоны или шорткодами выводятся формы и далее опять же свои обработчики. Если хотите углубиться - изучите вот этот урок. Впрочем, он уже староват, можете гуглить по плюс-минус тем же ключевым словам.
    Ответ написан
    Комментировать
  • Как повесить хук к функции создания миниатюр и создать дополнительное изображение в другой папке?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Эта фича уже встроена в WordPress с версии 4.4 (2015й год), он умеет корректно создавать нужные размеры, в том числе под ретину. Учимся читать документацию. Начните с пресс-релиза.
    Ответ написан
    Комментировать
  • Почему the_field acf работает именно так?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Потому что плагин (ACF) пытается максимально угадать, что же вы имели в виду. Посмотрите код функции acf_get_valid_post_id( $post_id ) в файле acf/includes/api/api-helpers.php. Именно эта функция вызывается в начале get_field() (которая, в свою очередь, вызывается в the_field()).
    Ответ написан
    Комментировать
  • Как правильно сделать ajax фильтр поcтов wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если отвечать на это, как на вопрос (а не задание, коим по сути данный вопрос является), то ответ сводится к оператору сравнения множественных аргументов параметров meta_query и tax_query. У вас, скорее всего, используется оператор AND - что подразумевает совпадение ВСЕХ перечисленных условий. А вам нужен оператор OR или комбинация операторов.
    Ответ написан
    Комментировать
  • Кто использует стартовый шаблон bedrock на wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вот прямо по вашей же ссылке чуть ниже на странице есть раздел Guides, в котором есть: Deploying to Kinsta with Trellis. А если перейти по ссылке All Guides, то там еще есть: Atomic Deployment with Sage 9 and DeployBot. А вообще у них еще свой стек - Trellis. Собственно, deployment - его важная часть. В документации все детально описано.

    Если же их схема вам не подходит, то деплоить можно как и любой другой проект под управлением Composer. Гуглите, тут вариантов и тонкостей вагон и тележка.
    Ответ написан
    Комментировать
  • Какой плагин кеширования в Вордпрессе лучше других?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ох, опять эта тема :)

    Для начала могу сказать какой точно никогда, ни при каких обстоятельствах не использовать - W3 Total Cache. Это адище с большой буквы. Туда же все остальные плагины, которые пытаются быть "все-в-одном" и предоставлять 120 страниц конфигурации. В топку.

    Далее, давайте мухи отдельно и котлеты отдельно. Есть object cache - у него свои задачи. Есть fragment cache - у него свои. Есть full page cache - это отдельная кухня. Есть кеширование на уровне сервера (nginx fastcgi_cache), все тот же full page cache но "навыворот". А еще Nginx умеет разговаривать с Memcached напрямую. И даже если сравнивать решения, которые делают одно и то же (например, тот же full page cache), разница в "эффекте" на разных серверах и даже на разных сайтах на одном сервере будет. Часто - существенная. Плюс, есть кеширование на многих уровнях на самом сервере - файловая система, кеши БД и тд. И все эти настройки будут влиять на поведение плагинов кеширования. Часто - существенно. Кеширование на стороне клиента - отдельная кухня, начиная с server push, prefetch и тд, выдача поддерживаемых форматов (brotli/gzip, woff/woff2/ttf, webp/jpg/png и тому подобное).

    В общем, performance - это целый комплекс мер, решений и инструментов. Подходить к этому надо с умом и четким планом, полным пониманием всего процесса от инициации запроса клиентом и до... а нету точки Б, потому что там свои моменты.

    А еще надо понимать, что ваш медленный DNS может убить всю экономию на PHP runtime. Или криво установленный SSL-сертификат. Или кеширование SSL-сессий, некорректно настроенное под специфику трафика конкретного проекта. Или канал на выходе перегруженный. Или далеко не оптимальный конфиг пула PHP. Или вообще Apache. Или I/O wait зашкаливает.

    Грубо говоря, если вы надеетесь найти один волшебный плагин, который будете лепить сверху на каждый сайт и всегда получать супер-мега-быстрый сайт - вы не на то тратите свою энергию. А проводить сравнительные тесты нет смысла, потому что по сути их результаты могут иметь хоть какой-то смысл только когда вы подбираете под один конкретный сайт. Если вы проведете все те же тесты на другом сайте и на другом сервере - получите уже другие результаты.

    И еще. Силы надо тратить на то, чтобы динамический сайт был быстрым. То есть, без плагинов кеширования вообще. Если сайт у вас тупит, то попытка замаскировать это сверху плагином кеширования - не самое разумное решение. Временное - да, возможно. Но не решает проблему.
    Ответ написан
    Комментировать
  • Как вы разрабатываете и поддерживаете сайты на Worpdress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    В целом все ок, разница всегда будет в каких-то нюансах. В зависимости от типа проекта, нюансов будет больше или меньше. У нас плюс-минус так:

    - Локальная разработка на macOS + Laravel/Valet (Nginx, PHP 7+, MariaDB, Redis/Memcached).
    -Staging/production могут быть как отдельными серверами, так и находиться на одном сервере, а также могут быть много сайтов на одном сервере, или это может быть не наш сервер, а какой-нибудь Kinsta или вообще клиентская инфраструктура к которой у нас доступа нет. Поэтому devops кухня вообще отделена. С нашей стороны только автодеплой из репы через CI/CD. Ветка develop -> staging, ветка master -> production.
    - WordPress, плагины, тема, и весь кастомный код являются зависимостями проекта, управляется с помощью Composer.
    - Работа с функциональностью WordPress строится полностью на командной строке с помощью WP-CLI. При необходимости пишутся свои команды для него.
    - Вся конфигурация проекта в .env (база, ключи, лицензии и прочее, что не попадает в git) и в папочке config в виде PHP-конфигураций (все что уже влияет на функциональность).
    - Медиа-файлы на локалке либо вообще не хранятся (Valet проксирует запросы на staging/production), либо синхронизируются со staging/production. Делается это с помощью отдельного cli-скрипта, который под капотом использует rsync.
    - Базы данных - отдельная история которая очень сильно зависит от специфики проекта. Где-то это простой push/pull с помощью WP Migrate DB, где-то тот же push/pull c помощью WP-CLI, где-то это целые миграции. В идеале надо стараться контент забирать с прода на стейдж и избегать публикации с dev/staging на продакшн. Но ситуации и проекты бывают разные, здесь нет одного правильного ответа.
    Ответ написан
    Комментировать
  • Статьи/заметки - как лучше организовать такое разделение на wordpress сайте?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ответ написан
    Комментировать
  • Как вывести миниатюры последних страниц (не записей!) в сайдбаре Wordpress кодом php?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Берите код, который для записей, только там где 'post_type' = > 'post' меняйте на 'post_type' => 'page'.
    Ответ написан