adding custom columns to post table for custom post in wp_admin

Create custom columns for your post types and making these columns sortable. In this example the custom post type is named movies and it has a custom taxonomy genre

add_filter( \'manage_edit-movie_columns\', \'my_edit_movie_columns\' ) ;

function my_edit_movie_columns( $columns ) {

	$columns = array(
		\'cb\' => \'\',
		\'title\' => __( \'Movie\' ),
		\'duration\' => __( \'Duration\' ),
		\'genre\' => __( \'Genre\' ),
		\'date\' => __( \'Date\' )
	);

	return $columns;
}


add_action( \'manage_movie_posts_custom_column\', \'my_manage_movie_columns\', 10, 2 );

function my_manage_movie_columns( $column, $post_id ) {
	global $post;

	switch( $column ) {

		* If displaying the \'duration\' column. *
		case \'duration\' :

			* Get the post meta. *
			$duration = get_post_meta( $post_id, \'duration\', true );

			* If no duration is found, output a default message. *
			if ( empty( $duration ) )
				echo __( \'Unknown\' );

			* If there is a duration, append \'minutes\' to the text string. *
			else
				printf( __( \'%s minutes\' ), $duration );

			break;

		* If displaying the \'genre\' column. *
		case \'genre\' :

			* Get the genres for the post. *
			$terms = get_the_terms( $post_id, \'genre\' );

			* If terms were found. *
			if ( !empty( $terms ) ) {

				$out = array();

				* Loop through each term, linking to the \'edit posts\' page for the specific term. *
				foreach ( $terms as $term ) {
					$out[] = sprintf( \'%s\',
						esc_url( add_query_arg( array( \'post_type\' => $post->post_type, \'genre\' => $term->slug ), \'edit.php\' ) ),
						esc_html( sanitize_term_field( \'name\', $term->name, $term->term_id, \'genre\', \'display\' ) )
					);
				}

				* Join the terms, separating them with a comma. *
				echo join( \', \', $out );
			}

			* If no terms were found, output a default message. *
			else {
				_e( \'No Genres\' );
			}

			break;

		* Just break out of the switch statement for everything else. *
		default :
			break;
	}
}


 MAKE SORTABLE
add_filter( \'manage_edit-movie_sortable_columns\', \'my_movie_sortable_columns\' );

function my_movie_sortable_columns( $columns ) {

	$columns[\'duration\'] = \'duration\';

	return $columns;
}

* Only run our customization on the \'edit.php\' page in the admin. *
add_action( \'load-edit.php\', \'my_edit_movie_load\' );

function my_edit_movie_load() {
	add_filter( \'request\', \'my_sort_movies\' );
}

* Sorts the movies. *
function my_sort_movies( $vars ) {

	* Check if we\'re viewing the \'movie\' post type. *
	if ( isset( $vars[\'post_type\'] ) && \'movie\' == $vars[\'post_type\'] ) {

		* Check if \'orderby\' is set to \'duration\'. *
		if ( isset( $vars[\'orderby\'] ) && \'duration\' == $vars[\'orderby\'] ) {

			* Merge the query vars with our custom variables. *
			$vars = array_merge(
				$vars,
				array(
					\'meta_key\' => \'duration\',
					\'orderby\' => \'meta_value_num\'
				)
			);
		}
	}

	return $vars;
}