get_terms возвращает пустой массив в тесте интеграции

Я использую PHPUnit WordPress для запуска некоторых тестов интеграции, и я получаю противоречивые результаты в зависимости от того, активирована ли WooCommerce или нет.

Не активируя WooCommerce, я создал всю необходимую таксономию и данные термина, затем создаю продукт и помечаю его.

$level = $this->factory->post->create( array( 'post_title' => 'Test Product', 'post_type' => 'product', 'post_status' => 'published' ) ); $tagged = wp_set_object_terms($level, 'Level 1', 'product_tag', true); 

После пометки всех моих сообщений, если я get_the_terms($level, 'product_tag') он возвращает ожидаемое:

 [{" term_id":2,"name":"Level 1","slug":"level-1","term_group":0," term_taxonomy_id":2,"taxonomy":"product_tag","description":"","parent":0,"count":5,"filter":"raw"}] 

В этой настройке все работает нормально, но позже в моем тесте я должен запустить

 $args = array( 'post_type' => 'product', 'posts_per_page' => -1, 'product_tag' => $tag ); $products = get_posts( $args ); 

Что не возвращает никаких продуктов – предположительно, потому что тип сообщения product не был зарегистрирован.

Если я активирую WooCommerce в своем тесте или зарегистрирую тип сообщения product , я начинаю получать странные результаты. wp_set_object_terms работает, потому что запуск get_the_terms( ... ) для отдельного продукта вернется

 [{"term_id":15,"name":"Level 1","slug":"level-1","term_group":0,"term_taxonomy_id":15,"taxonomy":"product_tag","description":"","parent":0,"count":0,"filter":"raw"}] 

Позже в моем тесте get_terms( 'product_tag' ) запускается, но возвращается пустой массив. Единственное заметное различие между термином meta в каждой настройке – это count . 0 и 5 с и без WooCommerce, соответственно.

Почему метки продукта недоступны при регистрации типа product ?

Я также пытался использовать wp_insert_post а не фабричный метод, но это не имело никакого значения.

Solutions Collecting From Web of "get_terms возвращает пустой массив в тесте интеграции"