post_type = $post_type; $this->items_per_page = isset($_GET['per_page']) ? intval($_GET['per_page']) : 25; $this->paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // Base query args $base_args = [ 'orderby' => 'title', 'order' => 'ASC', 'post_type' => $this->post_type, 'posts_per_page' => $this->items_per_page, 'paged' => $this->paged, ]; // Add owner_id filter only for non-administrators if (!current_user_can('administrator')) { $base_args['meta_query'] = array( array( 'key' => 'owner_id', 'value' => get_current_user_id(), 'compare' => '=' ) ); } // Merge with any additional query args $this->additional_query_args = array_merge($base_args, $additional_query_args); // Default labels that can be overridden $this->labels = array_merge([ 'title' => ucfirst($post_type) . 's', 'no_items' => 'No ' . strtolower($post_type) . 's found.', 'delete_confirm' => 'Are you sure you want to delete this ' . strtolower($post_type) . '?' ], $labels); } public function render(): void { $query = new WP_Query($this->additional_query_args); $edit_url_base = "/dashboard/" . $this->post_type . "s/edit-" . $this->post_type . "?edit="; ?>
have_posts()) : ?> have_posts()) : $query->the_post(); $post_id = get_the_ID(); ?>
Edit | get_delete_link($post_id); ?>

labels['no_items']; ?>

'delete', 'post' => $post_id, 'redirect_to' => urlencode($current_url) ), $current_url // Use current page URL instead of admin URL ), 'delete-post_' . $post_id ); return sprintf( 'Delete', esc_url($delete_url) ); } }