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

Вопрос или проблема

У меня есть несколько шаблонов, созданных с помощью конструктора тем Elementor. Однако возможность отображения их на вложенных архивах довольно ограничена. Вот моя ситуация

У меня есть пользовательская таксономия (теги), называемая Локации. Она далее вложена по мере добавления списков. Она получает адрес и разбивает его на Регион, Город и Местность, а затем устанавливает термины. С этим все в порядке. Вот как это выглядит.

введите описание изображения здесь

И

У меня есть следующие шаблоны, встроенные в конструктор тем.

  1. Шаблон региона (применяется к Waikato, а также ко всем другим регионам)
  2. Шаблон города (применяется к Гамильтону и всем другим городам)
  3. Шаблон местности (применяется к Франктону 3204, а также ко всем другим местностям)
  4. Шаблон услуги (применяется к кафе во Франктоне, а также ко всем другим услугам)

Elementor позволяет применять шаблоны к

  1. Всем локациям (это включает термины детей)
  2. Прямым детям Локаций
  3. Любому ребенку Локации

введите описание изображения здесь

Однако в моем случае я хочу применить 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. Волшебство кроется в функции проверки

https://github.com/elementor/elementor/issues/8155

Ответ или решение

Решение задачи добавления пользовательских условий отображения в Elementor для вложенных таксономий

Эта статья предназначена для тех, кто использует Elementor Theme Builder и сталкивается с ограничениями в отображении шаблонов для вложенных таксономий. Мы подробно рассмотрим, как добавить кастомные условия отображения для дочерних, внуков и правнуков пользовательской таксономии в Elementor.

Проблема

Ваша задача заключается в том, чтобы установить разные шаблоны для различных уровней вложенности вашей пользовательской таксономии, которая в вашем случае называется "Locations". Таксономия состоит из регионов, городов, местности и услуг. Стандартный функционал Elementor позволяет только указывать шаблоны для всех элементов таксономии, их прямых дочерних элементов и любых потомков. Однако требуется индивидуальное отображение для каждой конкретной категории.

Решение

Для решения проблемы необходимо добавить пользовательские условия для отображения шаблонов архивов таксономий. Ниже представлены основные шаги и разбивка кода, который поможет вам в этом процессе.

  1. Регистрация пользовательского условия

В первую очередь необходимо зарегистрировать новое условие для вашей таксономии с использованием хука 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 );
  1. Проверка и применение условий

Теперь, когда вы зарегистрировали условие, следите за тем, чтобы оно правильно применялось в условиях отображения шаблонов для каждого уровня вложенности (родитель, ребенок, внук, правнук). Используйте get_queried_object() для получения текущего объекта таксономии и проверки, является ли он дочерним элементом заданного ID.

  1. Тестирование

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

  1. Оптимизация и документация

Помимо рабочего кода, рекомендуется подробно документировать ваше решение, чтобы другие разработчики могли легко понять и использовать его. Кроме того, используйте SEO-оптимизацию в названиях и описаниях ваших таксономий, чтобы улучшить видимость в поисковых системах.

Заключение

Добавление пользовательских условий отображения для вложенных таксономий в Elementor Theme Builder требует понимания работы с таксономиями в WordPress. Используя приведенный код, вы сможете настроить отображение шаблонов для каждой категории элементов, что значительно упростит управление большим количеством категорий.

Если у вас возникли дополнительные вопросы, всегда полезно обратиться к документации Elementor или сообществу разработчиков, чтобы найти решения других пользователей с аналогичными проблемами.

Оцените материал
Добавить комментарий

Капча загружается...