I’ve created a custom post type for my “Testimonials”, I don’t need a title(s), how can I write a function that Adds the “Edit | Quick Edit | Trash | View” links to “date” if title isn’t shown in the column.
I’m using the plugin “Admin Columns” to hide the columns I don’t wish to show.

I’m trying to re-use this code from this previous StackExchange question ( No Edit / Delete Links for Custom Post Type? ), however I have already created the fields “Author” etc.
Using this code gives this result.

This is not easily done as there is no hook to add the rows actions. You can however, unregister the date column and re-register your own date column with the row actions added. A bit hacky unfortunately.
I have tried to ensure that the following code is for post type ‘testimonials’
First register your new date column and unregister the old: (use manage_{post_type}_posts_columns
hook)
add_filter('manage_testimonials_posts_columns', 'my_custom_date_column_head');
function my_custom_date_column_head($columns) {
$columns['date2'] = 'Date';
unset( $columns['date'] );
return $columns;
}
Then make your new date column sortable, (by ‘date’). Use manage_edit-{post_type}_sortable_columns
hook)
add_filter( 'manage_edit-testimonials_sortable_columns', 'my_custom_date_column_sort' );
function my_custom_date_column_sort( $columns ) {
$columns['date2'] = 'date';
return $columns;
}
Now comes the fun bit – displaying the content of the column. I have pretty much copied and pasted what WordPress does to fill the date column and then added the actions onto the end.
Use manage_{post_type}_posts_custom_columns
hook)
add_action( "manage_testimonials_posts_custom_column", 'my_custom_date_column_content',10,2);
function my_custom_date_column_content($column, $post_id ){
global $post,$mode;
if( 'date2' != $column )
return;
//**** Display default content of date column *******//
if ( '0000-00-00 00:00:00' == $post->post_date ) {
$t_time = $h_time = __( 'Unpublished' );
$time_diff = 0;
} else {
$t_time = get_the_time( __( 'Y/m/d g:i:s A' ) );
$m_time = $post->post_date;
$time = get_post_time( 'G', true, $post );
$time_diff = time() - $time;
if ( $time_diff > 0 && $time_diff < 24*60*60 )
$h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) );
else
$h_time = mysql2date( __( 'Y/m/d' ), $m_time );
}
if ( 'excerpt' == $mode )
echo apply_filters( 'post_date_column_time', $t_time, $post, $column, $mode );
else
echo '<abbr title="' . $t_time . '">' . apply_filters( 'post_date_column_time', $h_time, $post, $column, $mode ) . '</abbr>';
echo '<br />';
if ( 'publish' == $post->post_status ) {
_e( 'Published' );
} elseif ( 'future' == $post->post_status ) {
if ( $time_diff > 0 )
echo '<strong class="attention">' . __( 'Missed schedule' ) . '</strong>';
else
_e( 'Scheduled' );
} else {
_e( 'Last Modified' );
}
//***** END -- Display default content of date column *******//
//***** START -- Our actions *******//
//First set up some variables
$actions = array();
$post_type_object = get_post_type_object( $post->post_type );
$can_edit_post = current_user_can( $post_type_object->cap->edit_post, $post->ID );
//Actions to edit
if ( $can_edit_post && 'trash' != $post->post_status ) {
$actions['edit'] = '<a href="' . get_edit_post_link( $post->ID, true ) . '" title="' . esc_attr( __( 'Edit this item' ) ) . '">' . __( 'Edit' ) . '</a>';
$actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr( __( 'Edit this item inline' ) ) . '">' . __( 'Quick Edit' ) . '</a>';
}
//Actions to delete/trash
if ( current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) {
if ( 'trash' == $post->post_status )
$actions['untrash'] = "<a title="" . esc_attr( __( "Restore this item from the Trash' ) ) . "' href="" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . "&action=untrash', $post->ID ) ), 'untrash-' . $post->post_type . '_' . $post->ID ) . "'>" . __( 'Restore' ) . "</a>";
elseif ( EMPTY_TRASH_DAYS )
$actions['trash'] = "<a class="submitdelete" title="" . esc_attr( __( "Move this item to the Trash' ) ) . "' href="" . get_delete_post_link( $post->ID ) . "">" . __( 'Trash' ) . "</a>";
if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS )
$actions['delete'] = "<a class="submitdelete" title="" . esc_attr( __( "Delete this item permanently' ) ) . "' href="" . get_delete_post_link( $post->ID, "', true ) . "'>" . __( 'Delete Permanently' ) . "</a>";
}
//Actions to view/preview
if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) {
if ( $can_edit_post )
$actions['view'] = '<a href="' . esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) . '" title="' . esc_attr( sprintf( __( 'Preview “%s”' ), $title ) ) . '" rel="permalink">' . __( 'Preview' ) . '</a>';
} elseif ( 'trash' != $post->post_status ) {
$actions['view'] = '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View “%s”' ), $title ) ) . '" rel="permalink">' . __( 'View' ) . '</a>';
}
//***** END -- Our actions *******//
//Echo the 'actions' HTML, let WP_List_Table do the hard work
echo WP_List_Table::row_actions( $actions );
}