Вопрос или проблема
У меня есть несколько шаблонов, созданных с помощью конструктора тем Elementor. Однако возможность отображения их на вложенных архивах довольно ограничена. Вот моя ситуация
У меня есть пользовательская таксономия (теги), называемая Локации. Она далее вложена по мере добавления списков. Она получает адрес и разбивает его на Регион, Город и Местность, а затем устанавливает термины. С этим все в порядке. Вот как это выглядит.
И
У меня есть следующие шаблоны, встроенные в конструктор тем.
- Шаблон региона (применяется к Waikato, а также ко всем другим регионам)
- Шаблон города (применяется к Гамильтону и всем другим городам)
- Шаблон местности (применяется к Франктону 3204, а также ко всем другим местностям)
- Шаблон услуги (применяется к кафе во Франктоне, а также ко всем другим услугам)
Elementor позволяет применять шаблоны к
- Всем локациям (это включает термины детей)
- Прямым детям Локаций
- Любому ребенку Локации
Однако в моем случае я хочу применить 4 разных шаблона к родителю (региону), ребенку (городу), внуку (местности) и пра-внуку (услуге в местности).
Elementor позволяет зарегистрировать пользовательские условия в конструкторе тем, однако я не могу это сделать. Вот!
add_action( 'elementor/theme/register_conditions', function( $conditions_manager ) {
class Subcategory_Archive extends ElementorPro\Modules\ThemeBuilder\Conditions\Taxonomy {
private $taxonomy;
public function get_name() {
return 'child_of_' . $this->taxonomy->name;
}
public function get_label() {
return sprintf( __( 'Прямой ребенок %s Из', 'elementor-pro' ), $this->taxonomy->labels->singular_name );
}
public function __construct( $data ) {
parent::__construct( $data );
$this->taxonomy = $data['object'];
}
public function is_term() {
$taxonomy = $this->taxonomy->name;
$current = get_queried_object();
return ( $current && isset( $current->taxonomy ) && $taxonomy === $current->taxonomy );
}
public function check( $args ) {
$id = (int) $args['id'];
/**
* @var \WP_Term $current
*/
$current = get_queried_object();
if ( ! $this->is_term() || 0 === $current->parent ) {
return false;
}
while ( $current->parent > 0 ) {
if ( $id === $current->parent ) {
return true;
}
$current = get_term_by( 'id', $current->parent, $current->taxonomy );
}
return $id === $current->parent;
}
}
$taxonomy = get_term('location');
$conditions_manager->get_condition( 'listing' )->register_sub_condition( new Subcategory_Archive([ 'object' => $taxonomy ]) );
}, 100 );
Мне нужна помощь, чтобы зарегистрировать пользовательские условия для страниц архива для отображения этих таксономий.
ПРИМЕЧАНИЕ: есть возможность индивидуально выбирать каждый термин и применять шаблон. Однако у меня более 2500 категорий списков (например, Кафе) и тысячи местностей и городов. Я могу управлять регионами, потому что в Новой Зеландии всего 16 регионов.
Документация Elementor: https://developers.elementor.com/docs/theme-conditions/
Вы продвинулись с этой проблемой? Я сталкиваюсь с тем же прямо сейчас
Обновление
Все, кто испытывает трудности с решением этого, посмотрите на проблему в гитхабе elementor. Волшебство кроется в функции проверки
Ответ или решение
Решение задачи добавления пользовательских условий отображения в Elementor для вложенных таксономий
Эта статья предназначена для тех, кто использует Elementor Theme Builder и сталкивается с ограничениями в отображении шаблонов для вложенных таксономий. Мы подробно рассмотрим, как добавить кастомные условия отображения для дочерних, внуков и правнуков пользовательской таксономии в Elementor.
Проблема
Ваша задача заключается в том, чтобы установить разные шаблоны для различных уровней вложенности вашей пользовательской таксономии, которая в вашем случае называется "Locations". Таксономия состоит из регионов, городов, местности и услуг. Стандартный функционал Elementor позволяет только указывать шаблоны для всех элементов таксономии, их прямых дочерних элементов и любых потомков. Однако требуется индивидуальное отображение для каждой конкретной категории.
Решение
Для решения проблемы необходимо добавить пользовательские условия для отображения шаблонов архивов таксономий. Ниже представлены основные шаги и разбивка кода, который поможет вам в этом процессе.
- Регистрация пользовательского условия
В первую очередь необходимо зарегистрировать новое условие для вашей таксономии с использованием хука elementor/theme/register_conditions
.
add_action( 'elementor/theme/register_conditions', function( $conditions_manager ) {
class Custom_Taxonomy_Condition extends ElementorPro\Modules\ThemeBuilder\Conditions\Taxonomy {
private $taxonomy;
public function get_name() {
return 'custom_taxonomy_' . $this->taxonomy->name;
}
public function get_label() {
return sprintf( __( 'Custom Taxonomy %s', 'elementor-pro' ), $this->taxonomy->labels->singular_name );
}
public function __construct( $data ) {
parent::__construct( $data );
$this->taxonomy = $data['object'];
}
public function is_term() {
$taxonomy = $this->taxonomy->name;
$current = get_queried_object();
return ( $current && isset( $current->taxonomy ) && $taxonomy === $current->taxonomy );
}
public function check( $args ) {
$id = (int) $args['id'];
$current = get_queried_object();
if ( ! $this->is_term() ) {
return false;
}
while ( $current->parent > 0 ) {
if ( $id === $current->parent ) {
return true;
}
$current = get_term_by( 'id', $current->parent, $current->taxonomy );
}
return $id === $current->parent;
}
}
$taxonomy = get_term( 'location' ); // Получаем нужную таксономию
$conditions_manager->get_condition( 'taxonomy' )->register_sub_condition( new Custom_Taxonomy_Condition( [ 'object' => $taxonomy ] ) );
}, 100 );
- Проверка и применение условий
Теперь, когда вы зарегистрировали условие, следите за тем, чтобы оно правильно применялось в условиях отображения шаблонов для каждого уровня вложенности (родитель, ребенок, внук, правнук). Используйте get_queried_object()
для получения текущего объекта таксономии и проверки, является ли он дочерним элементом заданного ID
.
- Тестирование
После внесения изменений протестируйте отображение каждого из шаблонов на страницах с вложенной таксономией. Убедитесь, что условия сработали корректно и все шаблоны отображаются соответственно уровням вложенности.
- Оптимизация и документация
Помимо рабочего кода, рекомендуется подробно документировать ваше решение, чтобы другие разработчики могли легко понять и использовать его. Кроме того, используйте SEO-оптимизацию в названиях и описаниях ваших таксономий, чтобы улучшить видимость в поисковых системах.
Заключение
Добавление пользовательских условий отображения для вложенных таксономий в Elementor Theme Builder требует понимания работы с таксономиями в WordPress. Используя приведенный код, вы сможете настроить отображение шаблонов для каждой категории элементов, что значительно упростит управление большим количеством категорий.
Если у вас возникли дополнительные вопросы, всегда полезно обратиться к документации Elementor или сообществу разработчиков, чтобы найти решения других пользователей с аналогичными проблемами.