'redirects', 'singular' => 'redirect', 'ajax' => false, ] ); $this->db = $db; } /** * Define table columns * * @return array */ public function get_columns() { return [ 'cb' => '', 'source_url' => __( 'Source URL', 'admin-optimizer' ), 'target_url' => __( 'Target URL', 'admin-optimizer' ), 'redirect_type' => __( 'Type', 'admin-optimizer' ), 'preserve_query' => __( 'Preserve Query', 'admin-optimizer' ), 'hit_count' => __( 'Clicks/Hits', 'admin-optimizer' ), 'enabled' => __( 'Status', 'admin-optimizer' ), ]; } /** * Prepare table items for display * * @return void */ public function prepare_items() { $this->_column_headers = [ $this->get_columns(), [], [] ]; $total_items = $this->db->count_all(); $current = $this->get_pagenum(); $offset = ( $current - 1 ) * $this->per_page; $this->items = $this->db->get_paginated( $this->per_page, $offset ); $this->set_pagination_args( [ 'total_items' => $total_items, 'per_page' => $this->per_page, 'total_pages' => ceil( $total_items / $this->per_page ), ] ); } /** * Render checkbox column * * @param object $item Row data. * * @return string */ public function column_cb( $item ) { return ''; } /** * Render source URL column with row actions * * @param object $item Row data. * * @return string */ public function column_source_url( $item ) { $edit_url = Redirect_Manager::get_module_admin_url( [ 'edit_id' => $item->id ] ); $delete_form = '
'; $source = (string) $item->source_url; $test_url = preg_match( '#^https?://#i', $source ) ? $source : home_url( $source ); $actions = [ 'edit' => '' . esc_html__( 'Edit', 'admin-optimizer' ) . '', 'test' => '' . esc_html__( 'Test', 'admin-optimizer' ) . '', 'delete' => $delete_form, ]; return esc_html( $item->source_url ) . $this->row_actions( $actions ); } /** * Render target URL column * * @param object $item Row data. * * @return string */ public function column_target_url( $item ) { $output = '' . esc_html( $item->target_url ) . ''; if ( Redirect_Manager_DB::is_external_target( (string) $item->target_url ) ) { if ( ! empty( $item->allow_external ) ) { $output .= ' ' . esc_html__( 'External', 'admin-optimizer' ) . ''; } else { $output .= ' ' . esc_html__( 'External — Disabled', 'admin-optimizer' ) . ''; } } return $output; } /** * Render preserve query string column * * @param object $item Row data. * * @return string */ public function column_preserve_query( $item ) { return ! empty( $item->preserve_query ) ? esc_html__( 'Yes', 'admin-optimizer' ) : esc_html__( 'No', 'admin-optimizer' ); } /** * Render redirect type column * * @param object $item Row data. * * @return string */ public function column_redirect_type( $item ) { $labels = [ 301 => __( '301 Permanent', 'admin-optimizer' ), 302 => __( '302 Temporary', 'admin-optimizer' ), 307 => __( '307 Temporary', 'admin-optimizer' ), ]; return esc_html( $labels[ (int) $item->redirect_type ] ?? $item->redirect_type ); } /** * Render hit count column * * @param object $item Row data. * * @return string */ public function column_hit_count( $item ) { return esc_html( number_format_i18n( (int) $item->hit_count ) ); } /** * Render enabled/status column with toggle link * * @param object $item Row data. * * @return string */ public function column_enabled( $item ) { $is_enabled = (int) $item->enabled === 1; $new_state = $is_enabled ? 0 : 1; $toggle_form = ''; if ( $is_enabled ) { $badge = '' . esc_html__( 'Active', 'admin-optimizer' ) . ''; } else { $badge = '' . esc_html__( 'Disabled', 'admin-optimizer' ) . ''; } return $badge . ' ' . $toggle_form; } /** * Fallback column renderer * * @param object $item Row data. * @param string $column_name Column slug. * * @return string */ public function column_default( $item, $column_name ) { return esc_html( $item->$column_name ?? '' ); } /** * Message shown when there are no redirect records * * @return void */ public function no_items() { esc_html_e( 'No redirects found. Add one above.', 'admin-optimizer' ); } }