Albinor, то есть у страницы, которая назначена как главная? Доп. поля чем реализованы, ACF? Ссылок таких будет неопределенное количество в будущем, или это просто плюс-минус фиксированные ссылки в конкретном месте, сделаны раз и надолго?
Albinor, нужно уточнять ТЗ по самим ссылкам - как и где вы их собираетесь вставлять. В контенте (руками, через стандартное всплывающее окошко "добавить ссылку", шорткодом итд), нужно ли делать это для ссылок, генерируемых самим WP
azerphoenix, просто под вашу проверку реально подходит буквально 2-3 типа полей из всего перечня. Все остальные - вы просто зря нагружаете процессор. У вас же в функцию прилетает $field, проверяйте сразу его тип, все что не подходит - быстрый выход через return $field и прекращение дальнейших проверок.
Берете ID продукта, получаете термины таксономии 'pa_brand' (атрибута). На выходе массив терминов, каждый элемент массива - это объект WP_Term. Соответственно, $terms[0]->term_id - это и будет ID вашего термина.
Макс Жуков, А это отдельно решается. Get_the_terms внутри вызывает wp_get_object_terms в которой есть фильтр wp_get_object_terms_args. Данный фильтр позволяет модифицировать аргументы для конструктора WP_Term_Query, одним из которых является orderby. Дефолтное значение - name, но можно установить parent. Полистайте залинкованные доки.
Вы бы лучше описали изначальную задачу, что вы и зачем пытаетесь сделать, с какой целью. Потому что то, что вы сейчас пытаетесь исполнить идет вразрез с любой логикой. Ну и понятно, что отключая плагин ничего работать не будет - оно и не должно работать.
в каждой субдиректории /en /ru по одному ВП сайту будет
Если вы про режим Multisite, то не совсем так. WP будет один (один экземпляр движка), а виртуальные сайты - вот их сколько угодно. Но там никаких "папок" нету, это всего лишь часть урл, которая реализуется с помощью Rewrite API движка.
Макс Жуков, ваш искомый элемент всегда будет в массиве последним ("нижний уровень" как вы его называете). Развернув массив в обратном порядке получится что он всегда будет первым, с индексом 0. Что и требуется.
EvgenyMorozov, профилирование само по себе скорее относится к "продвинутым практикам для просветленных", поэтому придется научиться варить. Каким из предложенных способов - другой вопрос и зависит от среды. Если все на локалке - ставьте Xdebug и настраивайте его вместе с профайлером. Но тут без мануалов не обойтись вообще - как в процессе настройки, так и в процессе изучения готового профайла. Имхо, наиболее простой и удобный способ - установить Blackfire. Но бесплатная версия предоставляет только базовую инфу, возможно ее будет мало. Платная версия дорогая, оплата только на год (помесячно не берут), и имеет смысл только для сварщиков высших разрядов. Tideways - как альтернатива Blackfire.
Совершенно не обязательно эти хуки, это уже хардкор для прожженных. В базовом хуке pre_get_posts можно установить все что нужно через $query->set() – и post_type, и по каким полям искать. Гуглится на раз-два на всех языках.