admin管理员组

文章数量:1323729

I have created a custom post type, but I do not want it to have a permalink. By default, after entering the post title, it creates a permalink. I do not need them to be generated.

From my reading, it is said that custom post type will have a permalink and there is no way of disabling it. Is there a way that I can prevent the ajax call that receives the permalink?

I have created a custom post type, but I do not want it to have a permalink. By default, after entering the post title, it creates a permalink. I do not need them to be generated.

From my reading, it is said that custom post type will have a permalink and there is no way of disabling it. Is there a way that I can prevent the ajax call that receives the permalink?

Share Improve this question edited Sep 3, 2019 at 15:22 Tes3awy 1058 bronze badges asked Mar 15, 2013 at 14:46 meWantToLearnmeWantToLearn 2392 gold badges3 silver badges7 bronze badges 2
  • 1 Do you want to hide the permalink under the post title on Edit Post page? Do I understand right? – Max Yudin Commented Mar 15, 2013 at 15:02
  • yes, I can hide it with css, but I want to disable it so I dont have to use css. If i could disable the ajax call it would be best – meWantToLearn Commented Mar 15, 2013 at 15:12
Add a comment  | 

3 Answers 3

Reset to default 7
<?php
    add_filter('get_sample_permalink_html', 'my_hide_permalinks');
    function my_hide_permalinks($in){
        global $post;
        if($post->post_type == 'my_post_type')
            $out = preg_replace('~<div id="edit-slug-box".*</div>~Ui', '', $in);
        return $out;
    }

This will remove:

  • Permalink itself
  • View Post button
  • Get Shortlink button

If you want to remove permalink only, replace the line containing preg_replace with

$out = preg_replace('~<span id="sample-permalink".*</span>~Ui', '', $in);

UPDATE:

get_sample_permalink_html has changed in version 4.4.

Here is the updated and tested code:

add_filter('get_sample_permalink_html', 'my_hide_permalinks', 10, 5);

function my_hide_permalinks($return, $post_id, $new_title, $new_slug, $post)
{
    if($post->post_type == 'my_post_type') {
        return '';
    }
    return $return;
}

While the accepted answer seems to only hide the permalink from showing, but still being generated and accessible, you can disable the permalink from showing and being accessible by setting certain register_post_types parameters.

I've achieved what I needed by only setting the following, but depending on your specific case, you may want to adjust some of the other parameters.

'public' => false,
'show_ui' => true

More: https://wordpress.stackexchange/a/108658/33056

As the WordPress documention suggests, simply turn off the public argument of the registered post type.

It will have the consequence to turn off the following arguments, only if not specified otherwise:

  • exclude_from_search
  • publicly_queryable
  • show_in_nav_menus
  • show_ui

So you will not get anymore the possibility to go on the singular and the permalink is not shown anymore on the admin and the "view" buttons are hidden too.

PS: The selected answer shows what should not be done when it comes to WordPress development, badly. There is no need to alterate the render of some HTML and/or code something since there is a WordPress builtin Post Type API for that. So please consider my answer, as it meets all the question requirements and it is simple and straight to the point with a builtin solution.

本文标签: Disable permalink on custom post type