When viewing non-custom Posts, you get the likes of this submenu:
I’m not using a title – I’m using custom columns with two fields concatenated:
Is there any quick and easy way of adding the submenu to my custom post columns? Possibly by actually using the ‘title’ field on my custom post creation page – without having the title input box, as it’s unnecessary for my users to see/edit.
I had a similar situation and I based myself on </wp-admin/includes/class-wp-posts-list-table.php
>:499 (function single_row {
…case 'title'
)
Copy the $actions
creation block, and associated variables, (which looks something like this) to your manage_{post_type}_posts_custom_column
action:
$post = get_post( $post_id );
setup_postdata( $post );
$title = _draft_or_post_title();
$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 = array();
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>';
}
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>";
}
if ( $post_type_object->public ) {
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>';
}
}
Modify this line:
$this->row_actions( $actions ); // From this
// This is calling a non static function statically and will throw an error.
// WP_List_Table::row_actions( $actions );
// Correct way, no error.
$WPTables = new WP_List_Table;
$WPTables->row_actions( $actions );
Not the most futureproof of code but until they wrap it up in a reusable function, its a good working solution.
Cheers,