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

2 Answers 2

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,
5
  • "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, 2013 at 23:13
  • I test this on my site before posting answer here.
    – pendjer
    Oct 17, 2013 at 8:36
  • Aki check this. wordpress.stackexchange.com/questions/15321/… I notice that this is the similar question (solved).
    – pendjer
    Oct 17, 2013 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, 2013 at 13:29
  • This works in 2019.
    – Amjad
    Feb 28, 2019 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' );
3
  • 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, 2013 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, 2013 at 19:56
  • Yes, View Post link still appears after publishing post in backend, gonna try this method now. Aug 26, 2016 at 19:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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