'; $tabs = self::$tabs; if ( ! empty( Settings::get( 'enable_tag_support' ) ) ) { $pos = array_search( 'optimize_categories', $tabs, true ); array_splice( $tabs, false !== $pos ? $pos + 1 : count( $tabs ), 0, array( 'optimize_tags' ) ); } foreach ( $tabs as $tab ) { $label = Messages::get( 'tabs.' . $tab ); $active = $current_tab === $tab ? ' nav-tab-active' : ''; printf( '%s', esc_url( add_query_arg( 'tab', $tab, admin_url( 'admin.php?page=ai-content-by-parallax' ) ) ), esc_attr( $active ), esc_html( $label ) ); } echo ''; } /** * Render the active tab content. * * @param string $current_tab Active tab key. * @param Client $client Loaded client instance. * @return void */ private static function display_current_tab( string $current_tab, Client $client ): void { switch ( $current_tab ) { case 'optimize_products': OptimizeTable::display( 'Products', Filtered_Products::class, $client->get_credits() ); break; case 'optimize_categories': OptimizeTable::display( 'Product Categories', Filtered_Categories::class, $client->get_credits() ); break; case 'optimize_tags': OptimizeTable::display( 'Product Tags', Filtered_Tags::class, $client->get_credits() ); break; case 'approval_import': self::display_approval_import_tab(); break; case 'connection': self::display_credentials_form(); break; default: echo '

' . esc_html( Messages::get( 'settings.select_tab' ) ) . '

'; } } /** * Render the connection settings form. * * @return void */ private static function display_credentials_form(): void { ?>

' . esc_html( Messages::get( 'batch.no_requests_found' ) ) . '

'; return; } $placeholders = array( array( 'key' => 'product_batch_requests', 'label' => Messages::get( 'batch.product_requests' ), 'empty' => Messages::get( 'batch.no_product_requests' ), ), array( 'key' => 'category_batch_requests', 'label' => Messages::get( 'batch.category_requests' ), 'empty' => Messages::get( 'batch.no_category_requests' ), ), array( 'key' => 'product_batch_request_details', 'label' => Messages::get( 'batch.product_details' ), 'empty' => Messages::get( 'batch.no_product_details' ), ), array( 'key' => 'category_batch_request_details', 'label' => Messages::get( 'batch.category_details' ), 'empty' => Messages::get( 'batch.no_category_details' ), ), ); foreach ( $placeholders as $placeholder ) { self::render_ajax_table_placeholder( (string) $placeholder['key'], (string) $placeholder['label'], (string) $placeholder['empty'] ); } } /** * Output markup placeholder for an AJAX-loaded table. * * @param string $table_key Table identifier key. * @param string $label Loading label. * @param string $empty_text Empty state text. * @return void */ private static function render_ajax_table_placeholder( string $table_key, string $label, string $empty_text ): void { printf( '

%2$s

', esc_attr( $table_key ), /* translators: %s: loading label */ esc_html( Messages::format( 'batch.loading', $label ) ), esc_attr( $empty_text ) ); } }