2

I have created a custom post type, but it just to list some data on a page and it doesn't have any single.php.

How do i disable so on the post page when i click publish it doesn't show the "View Page" link and also how do i disable the "View" link in the columns for that post type.

Thanks

8

Changing the public argument of register_post_type() will remove the link to view your custom post type publicly.

'public' => false, 

See: WordPress Codex

Note that this will also hide your custom post type from the admin navigation menus, which you might not want. To hide the 'View Post' link but keep your post type in the admin menus use show_ui as well like so:

'public'  => false,
'show_ui' => true,
  • "This answer was flagged as low-quality because of its length and content", which I am sure you don't want. Please add some explanation to your answer and links to relevant sources, such as the Codex. – s_ha_dum Oct 16 '13 at 23:13
  • I test this on my site before posting answer here. – pendjer Oct 17 '13 at 8:36
  • Aki check this. wordpress.stackexchange.com/questions/15321/… I notice that this is the similar question (solved). – pendjer Oct 17 '13 at 8:40
  • If you are response about testing the answer is directed at me, I said nothing about whether the answer is correct or not, just that you need to add some explanation to it. – s_ha_dum Oct 17 '13 at 13:29
  • This works in 2019. – Amjad Feb 28 at 2:55
3

The previous answer is incorrect. The message at the top of a post edit page cannot be modified using labels. You need to use the post_updated_messages filter.

The following function will customize the messages using the name of the post type - handy if you're using custom post types. It's a modified version of the example on the Wordpress Codex.

Notice that the View and Preview links are controlled with the $viewLink, $previewLink, and $schedPreviewLink variables, which will only appear if the visibility of the current post's post type is set to public.

function custom_post_type_messages($messages) {
  global $post, $post_ID;

  $post_type = get_post_type( $post_ID );
  $obj = get_post_type_object($post_type);

  $singular = $obj->labels->singular_name;

  $viewLink = ($obj->public) ?  ' <a href="%s">View '.strtolower($singular).'</a>' : "";
  $previewLink = ($obj->public) ? ' <a target="_blank" href="%s">Preview '.strtolower($singular).'</a>': "";
  $schedPreviewLink = ($obj->public) ? ' <a target="_blank" href="%2$s">Preview '.strtolower($singular).'</a>': "";

  $messages[$post_type] = array(
    0 => '', // Unused. Messages start at index 1.
    1 => sprintf( __($singular.' updated.'.$viewLink), esc_url( get_permalink($post_ID) ) ),
    2 => __('Custom field updated.'),
    3 => __('Custom field deleted.'),
    4 => __($singular.' updated.'),
    5 => isset($_GET['revision']) ? sprintf( __($singular.' restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
    6 => sprintf( __($singular.' published.'.$viewLink), esc_url( get_permalink($post_ID) ) ),
    7 => __('Page saved.'),
    8 => sprintf( __($singular.' submitted.'.$previewLink), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
    9 => sprintf( __($singular.' scheduled for: <strong>%1$s</strong>.'.$schedPreviewLink), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
    10 => sprintf( __($singular.' draft updated.'.$previewLink), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
  );
  return $messages;
}

add_filter('post_updated_messages', 'custom_post_type_messages' );
  • While woefully lacking in detail, the previous answer by @pendjer is not wrong. Setting the public argument to false does remove the "View" links on both the edit "index" table and the main edit screen. And that seems to be what the OP wants. – s_ha_dum Oct 17 '13 at 13:35
  • 3
    @s_ha_dum 'when i click publish it doesn't show the "View Page"' indicates to me the message that is displayed at the top of the page when a post is published or updated. Simply changing the public argument to false will not remove this message/link. It still appears, and the link will produce a 404 error. – Matt Nov 20 '13 at 19:56
  • Yes, View Post link still appears after publishing post in backend, gonna try this method now. – Solomon Closson Aug 26 '16 at 19:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.