register_term_page(); } public function render_brands_overview_page() { if ( ! $this->current_user_can_manage() ) { return; } $taxonomy = $this->detect_brand_taxonomy(); if ( '' === $taxonomy ) { ?>

get_term_overview_data( $taxonomy ); $rows = isset( $overview['rows'] ) ? $overview['rows'] : []; $empty_count = isset( $overview['empty_count'] ) ? (int) $overview['empty_count'] : 0; ?>

render_term_bulk_panel( __( 'merken', GROQ_AI_PRODUCT_TEXT_DOMAIN ), $empty_count ); ?>

enqueue_admin_styles(); $taxonomy = $this->detect_brand_taxonomy(); if ( '' === $taxonomy ) { return; } wp_enqueue_script( 'groq-ai-term-bulk', plugins_url( 'assets/js/term-bulk.js', GROQ_AI_PRODUCT_TEXT_FILE ), [], GROQ_AI_PRODUCT_TEXT_VERSION, true ); $this->localize_term_bulk_script( $taxonomy, [ 'allowRegenerate' => true, 'strings' => [ 'statusIdle' => __( 'Bulk gestart. AI werkt de geselecteerde merken bij…', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'statusProgress' => __( 'Merk %1$s van %2$s: %3$s', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'statusDone' => __( 'Klaar! %d merken bijgewerkt.', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'statusStopped' => __( 'Bulk generatie gestopt. %d merken bijgewerkt.', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'statusEmpty' => __( 'Geen merken zonder omschrijving gevonden.', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'logSuccess' => __( '%1$s gevuld (%2$d woorden).', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'logError' => __( '%1$s mislukt: %2$s', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'confirmStop' => __( 'Weet je zeker dat je wilt stoppen? Het huidige merk kan onafgemaakt blijven.', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'confirmRegenerate' => __( 'Wil je %s opnieuw laten schrijven?', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'regenerateProgress' => __( '%s wordt opnieuw geschreven…', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'regenerateDone' => __( '%s is bijgewerkt.', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'regenerateError' => __( 'Kon %1$s niet bijwerken: %2$s', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'regenerateBlocked' => __( 'Wacht tot de bulk generatie klaar is voordat je een merk opnieuw genereert.', GROQ_AI_PRODUCT_TEXT_DOMAIN ), ], ] ); } private function detect_brand_taxonomy() { if ( null !== $this->brand_taxonomy ) { return $this->brand_taxonomy; } $candidates = [ 'product_brand', 'pwb-brand', 'yith_product_brand', 'berocket_brand', ]; if ( taxonomy_exists( 'pa_brand' ) ) { array_unshift( $candidates, 'pa_brand' ); } $candidates = apply_filters( 'groq_ai_brand_taxonomy_candidates', $candidates ); $found = ''; foreach ( $candidates as $tax ) { $tax = sanitize_key( (string) $tax ); if ( $tax && taxonomy_exists( $tax ) ) { $found = $tax; break; } } $found = apply_filters( 'groq_ai_brand_taxonomy', $found ); $this->brand_taxonomy = sanitize_key( (string) $found ); return $this->brand_taxonomy; } }