base ) { return; } add_filter( "manage_{$current_screen->post_type}_posts_columns", [ $this, 'add_column' ], 10, 1 ); add_action( "manage_{$current_screen->post_type}_posts_custom_column", [ $this, 'display_column' ], 10, 2 ); } /** * Adds Slug column to Posts list column * * @param array $columns An array of column names. * @return array Modified array of column names. */ public function add_column( array $columns ): array { $new_columns = []; $insert_after = 'title'; foreach ( $columns as $key => $value ) { $new_columns[ $key ] = $value; if ( $key === $insert_after ) { $new_columns['wpasc-slug'] = __( 'URL Path', 'admin-slug-column' ); } } return $new_columns; } /** * Displays the slug and/or path in the custom column * * @param string $column_name Name of the column. * @param int $post_id Post ID. * @return void */ public function display_column( string $column_name, int $post_id ): void { if ( 'wpasc-slug' !== $column_name ) { return; } $post = get_post( $post_id ); if ( ! $post instanceof WP_Post ) { return; } if ( in_array( $post->post_status, [ 'draft', 'pending', 'future' ], true ) ) { $this->display_draft_slug( $post ); } else { $this->display_published_slug( $post ); } } /** * Displays the slug for draft, pending, or future posts * * @param WP_Post $post Post object. * @return void */ private function display_draft_slug( WP_Post $post ): void { $post_draft_url_array = get_sample_permalink( $post ); if ( ! is_array( $post_draft_url_array ) || count( $post_draft_url_array ) !== 2 ) { return; } $post_draft_url_pre = str_replace( home_url(), '', $post_draft_url_array[0] ); // urldecode() not needed here; get_sample_permalink()[1] already handles multibyte decoding. // preg_replace handles any CPT rewrite tag placeholder, not just %postname%/%pagename%. $post_slug = preg_replace( '/%[^%]+%/', $post_draft_url_array[1], $post_draft_url_pre ); printf( '%s', esc_html( $post_slug ) ); } /** * Displays the slug for published posts * * @param WP_Post $post Post object. * @return void */ private function display_published_slug( WP_Post $post ): void { $permalink = get_permalink( $post ); if ( ! is_string( $permalink ) ) { return; } $post_slug = str_replace( home_url(), '', $permalink ); echo esc_html( urldecode( $post_slug ) ); } } // Initialize the plugin add_action( 'plugins_loaded', function() { new WPAdminSlugColumn(); } );