• Почему the_field acf работает именно так?

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

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    Советую поковыряться во ВСЕХ настройках, несколько раз. Со временем придет понимание как удобнее лично для тебя, и на выходе будет именно так, как надо. Вот как выглядит мой PhpStorm:
    5caf2d324a17f660543681.jpeg
    Ответ написан
  • Как зарабатывать 1000$ на фрилансе верстальщику?

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    Придерживайтесь нескольких простых правил:

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

    То есть, сидите и ловите адекватные заказы, которые проходят данные фильтры. Вероятность долгоиграющих проектов или постоянных клиентов при таком подходе достаточно высока. Со временем получаете контракты на частичную загрузку от одного или нескольких клиентов и работаете на них на постоянной основе, через тот же Upwork.
    Ответ написан
  • Как правильно сделать ajax фильтр поcтов wordpress?

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

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    Создавайте локальные self-signed сертификаты корректно, подписывая их специально созданным локальным рутом. Его (рут-сертификат) добавляйте в keychain. Уроков в сети - масса, разжевано уже сто лет назад.
    Ответ написан
  • Чем верстать тему Wordpress?

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    1. Как вы кастомизируете свои темы для Wordpress?

    С чужими стараемся не работать вообще. Если приходится, то кастомизируем так, как это ложится в существующую тему с ее возможностями и ограничениями. ACF Pro рулит, конечно же.

    2. Используете что-то типа Unyson?

    Нет. Сам по себе Unyson - не более чем разрекламированный "фреймворк" (на самом деле нет, не фреймворк). Есть стартовая тема _s, но у любой команды / разраба с опытом достаточно быстро появляются свои наработки и свой starter kit. У нас все свое.

    3. Верстать тему ручками моветон?

    Нет. Как раз наоборот, все крупные и серьезные проекты (да, на WP такие есть) делаются только так - с нуля, ручками, без каких-то "фреймворков". Чаще всего с нормальным шаблонизатором (Timber/Twig например). Моветон - это использовать "премиум"-темы "тысяча-фич-в-одном".
    Ответ написан
  • Кто использует стартовый шаблон bedrock на wordpress?

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

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

    HeadOnFire
    @HeadOnFire
    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
    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 на продакшн. Но ситуации и проекты бывают разные, здесь нет одного правильного ответа.
    Ответ написан
  • Какой MacBook выбрать для монтажа видео 2013 или 2017?

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    Для комфортной работы с 4К видео - свежие MacBook Pro 15", только Core i7 (ни в коем случае не i5), и только с дискретной видяхой, только с SSD от 500Gb. Ну и лучше всего делать не в Adobe'овском софте. 13ка c урезанным процессором, без дискретки и с диском на 128Gb не подходит от слова совсем. 15ка 2013го года в теории подходит, на практике 2 проблемы - для 4К он будет медленноват + таки да, возраст.

    ИМХО, если нужен комфортный монтаж, либо новый MBP в полном фарше, либо соберите десктоп под винду с мощным железом. Даже многие топовые ютюберы и любители макбуков рендерят на десктопах.
    Ответ написан
  • Лучший способ генерации текста?

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    Имхо, если уж писать свой велосипед, достаточно будет:
    1. Выберите один и тот же формат, фигурные {} значит везде фигурные, квадратные [] - значит везде квадратные.
    2. Вхождения ищите простой регуляркой.
    3. Найденные вхождения токенизируйте и выполняйте свою логику.
    Но лучше возьмите готовое решение, они есть. Вот быстрый поиск на packagist.org выдал:
    https://packagist.org/packages/aymanrb/php-unstruc...
    https://packagist.org/packages/zualex/parsertext
    и еще десятки либ.
    Ответ написан
  • Как вывести миниатюры последних страниц (не записей!) в сайдбаре Wordpress кодом php?

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

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    1. У WP_Query нет и никогда не было аргумента 'hide_empty'. Этот аргумент у таксономий встречается, в WP_Term_Query. Соответственно, его значения true или false никакого эффекта не дадут, он игнорируется. Уберите его.
    2. 'meta_key' => 'sort' инструктирует WP_Query в первую очередь выбрать записи, у которых данное мета-поле есть.
    Сортировка происходит (условно) после выборки, сортируются те результаты, которые соответствуют условиям выборки, в данном случае это записи у которых мета-поле sort существует.
    3. Попробуйте вот так:
    $args = [
    	'meta_query' => [
    		'relation' => 'AND',
    		'meta_exists_clause' => [
    			'key'     => 'sort',
    			'compare' => 'EXISTS',
    		],
    		'meta_value_clause' => [
    			'key'  => 'sort',
    			'type' => 'numeric',
    		],
    	],
    	'orderby' => [
    		'meta_exists_clause' => 'ASC',
    		'meta_value_clause'  => 'DESC',
    	],
    ];
    Ответ написан
  • Как написать консольный php скрипт для wordpress?

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    Включение wp-load.php в принципе и есть способом подключения WP. Но в случае с командной строкой есть нюансы - надо конечно смотреть ваши фаталы (поделитесь инфой из error.log), высока вероятность того, что он ругается на отсутствие некоторых переменных окружения - элементов массива $_SERVER например.

    Если вам нужно полноценно работать в CLI - используйте WP-CLI, пишите свои пакеты под него. Если какие-то простые задачи - вешайте через WP Cron API.
    Ответ написан
  • Для каких задач в веб-разработке очень хорошо подходит питон?

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    ИМХО, судя по комментариям и вашим ответам, вы как-то странно выбираете - пассионарно, но зашорено (вот например, ваша нелюбовь к PHP, при том что вы его даже не знаете).

    Если хотите быть успешным коммерчески и рубить бабло налево-направо именно в веб - JS, PHP, Ruby, Go как замена Node.js.

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

    А если хотите качественно развиваться как разработчик - перестаньте ограничивать себя устаревшими мемчиками типа "пых-говно", изучайте разные языки. Начните с академической Java, поковыряйте С/С++/С#, попробуйте Go, полистайте доку по Swift или Rust, посмотрите особенности Haskell. Гляньте ассемблер, чтобы почувствовать истоки. Perl и Shell/Bash не забудьте. Ну и, конечно же - PHP, Ruby, Python.
    Ответ написан
  • Что не нравится яблокам?

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    За исключением 404й у CSS бутстрапа, никаких других проблем не вижу. Из того, что мне удалось нарыть, проблема скорее всего когда какая-то приложуха блокирует доступ. Например вот тут настройки самого Сафари, а здесь больше вариантов.

    5c765ca315eae600763734.jpeg5c765c95798d8070242817.jpeg
    Ответ написан
  • Как в WP разрешить чтение постов с другим статусом?

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    Плагин не плагин, а регистрируется post_status в конечном итоге с помощью функции register_post_status. Как и многие другие функции WP, она принимает ряд аргументов, в том числе такие:

    public
    (bool) (optional) Whether posts of this status should be shown in the front end of the site.
    Default: false

    internal
    (bool) (optional) Whether the status is for internal use only.
    Default: false

    private
    (bool) (optional) Whether the posts of this status should be accessible by their urls.
    Default: false


    Эти аргументы определяют, будет ли доступен данный статус на фронтенде и будут ли генерироваться ЧПУ. Скорее всего плагин конфигурирует их как приватные, поэтому они недоступны. Есть 3 варианта (возможных):

    1. В самом плагине есть возможность перенастроить эти свойства под себя.
    2. Плагин предоставляет фильтр, с помощью которого можно изменить эти аргументы.
    3. Менять эти аргументы напрямую в определении статусов, через глобальный доступ (фильтрами тут WordPress, увы, не радует):

    function make_archived_status_public()
    {
    	global $wp_post_statuses;
    
    	// Меняем public на true
    	$wp_post_statuses['archived']->public = true;
    
    	// Повторяем для других аргументов, если нужно
    	// ...
    }
    add_action( 'init', 'make_archived_status_public' );
    Ответ написан
  • Почему не работают функции WP?

    HeadOnFire
    @HeadOnFire
    WordPress Evangelist
    А как вы вызываете шаблон/страницу? По какому УРЛ открываете? Потому что у вас PHP ругается на первую же вордпрессовскую функцию в коде. Любую, которая попадается первой. Это говорит о том, что именно вордпрессовские функции не загружены, то есть вы исполняете файл темлпейта вне окружения WordPress. А это, вероятнее всего, потому что вы что-то делаете не так.
    Ответ написан