При переносе сайта с зарубежного хостинга заметил, что страницы грузятся очень долго, хотя сервер более свежий.

Оказалось, что при встраивании видео с YouTube через embed или через плагин ACF 7 на стороне сервера делается запрос вида

А т.к. YouTube замедляется, то запрос падает по таймауту (5с) и отрисовка страницы идет очень долго. Удалить видео со страниц нет возможности, поэтому нужно было найти другое решение.

Просто удаление провайдеров из oembed и отключение embed_oembed_discover не помогает и если проследить по стеку вызовов — acf вызывает wp_oembed_get($url, $args), где в $args передаются только width и height. А нужно туда передать [‘discover’=> false].

Далее проследив по стеку вызовов выясняю, что нигде нет хуков, где можно было бы подменить аргумент discover, вплоть до момента самого запроса через WP_Http::request().

Благо, внутри request есть хук pre_http_request, через который можно перехватить запрос и в ответ прислать заглушку, что и решило вопрос.

Код для встраивания в код темы в файл functions.php


Когда работаете с WordPress Toolset плагином и создаете таксономии, то можете столкнуться с невозможностью поставить public параметр в false, что скрывает архив таксономии с сайта.


Для тех или иных задач в WordPress необходимо добавить Custom Post Type (раздел, аналогичный постам и страницам). Через функцию register_post_type добавили новый тип постов, но при переходе по ссылке на страницу записи нового Custom Post Type выидим 404 ошибку.

Решение связано с обновлением таблицы прав доступа. При регистрации post type в аргументы нужно прописать publicly_queryable => true

Далее необходимо применить обновленные права, добавив, например, в function.php вашей темы вызов следующей функции:

flush_rewrite_rules()

После добавления обновляем страницу сайта и после этого сразу же удаляем вызов функции. Проблема должна уйти


В 90% случаев при разработке на WordPress  спасает компонент Advanced Custom Fields. Это компонент динамического добавления полей для разных компонентов WordPress — постов, страниц, настройки темы (только в PRO) и многое другое. 

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

Благо, у компонента ACF есть отличное API, построенное на хуках, чем мы и воспользуемся.