Как мне зарегистрировать свою таксономию до того, как WooCommerce создаст тип поста «Product»?

Как можно зарегистрировать собственную таксономию до того, как WooCommerce создаст тип поста «Product»? <br/><br/> Установка приоритета «1» не дает нужного результата. Возможно, требуется использование другого хука? <br/><br/> Есть ли у кого-то идеи или предложения? <br/><br/><pre><code class="php">add_action( 'init', 'my_custom_taxonomy' );
function my_custom_taxonomy() {
  // ...
  register_taxonomy( 'my_taxonomy', [ 'product' ], $args );
}</code></pre>
  • 26 ноября 2024 г. 4:43
Ответы на вопрос 2
Чтобы зарегистрировать собственную таксономию до того, как WooCommerce создаст тип поста «Product», вам нужно использовать более ранний хук в WordPress. WooCommerce загружает свои типы постов во время инициализации, но события, происходящие до этого, могут быть обработаны с помощью хука `plugins_loaded`.

Вот пример, как это можно сделать:

```php
add_action( 'plugins_loaded', 'my_custom_taxonomy' );
function my_custom_taxonomy() {
    // Проверяем, загружен ли WooCommerce
    if ( class_exists( 'WooCommerce' ) ) {
        $args = array(
            'hierarchical'      => true,
            'labels'            => array(
                'name'              => _x( 'Моя Таксономия', 'taxonomy general name' ),
                'singular_name'     => _x( 'Моя Таксономия', 'taxonomy singular name' ),
                'search_items'      => __( 'Искать по Мой Таксономия' ),
                'all_items'         => __( 'Все элементы Мой Таксономия' ),
                'parent_item'       => __( 'Родительский элемент' ),
                'parent_item_colon' => __( 'Родительский элемент:' ),
                'edit_item'         => __( 'Редактировать элемент' ),
                'update_item'       => __( 'Обновить элемент' ),
                'add_new_item'      => __( 'Добавить новый элемент' ),
                'new_item_name'     => __( 'Новое имя элемента' ),
                'menu_name'         => __( 'Моя Таксономия' ),
            ),
            'public'            => true,
            'rewrite'           => array( 'slug' => 'my_taxonomy' ),
        );
        
        register_taxonomy( 'my_taxonomy', array( 'product' ), $args );
    }
}
```

### Разбор кода
1. **Хук `plugins_loaded`**: Этот хук вызывается после загрузки всех установленных плагинов, что позволяет нам убедиться, что WooCommerce уже загружен, прежде чем мы зарегистрируем нашу таксономию.
2. **Проверка на наличие WooCommerce**: Мы проверяем, существует ли класс `WooCommerce`, чтобы избежать ошибок, если плагин выключен или недоступен.
3. **Регистрация таксономии**: Используйте функцию `register_taxonomy` для создания таксономии, привязанной к типу поста «product».

Эта реализация обеспечит правильную регистрацию вашей таксономии до создания типа поста WooCommerce «Product». Не забудьте задать правильные аргументы в `$args` в зависимости от ваших потребностей.
В WooCommerce есть хук woocommerce_register_taxonomy до регистрации всех таксономий 

Есть цикл регистрации атрибутов

$attribute_taxonomies = wc_get_attribute_taxonomies();

if ( $attribute_taxonomies ) {
	foreach ( $attribute_taxonomies as $tax ) {
		$name = wc_attribute_taxonomy_name( $tax->attribute_name );

		if ( $name ) {

			// ...

			register_taxonomy( $name, apply_filters( "woocommerce_taxonomy_objects_{$name}", array( 'product' ) ), apply_filters( "woocommerce_taxonomy_args_{$name}", $taxonomy_data ) );
		}
	}
}


Есть хук после регистрации таксономий woocommerce_after_register_taxonomy

Лучше посмотрите в исходниках как реализовано и делайте по такому же стайл гайду
Похожие вопросы