没有自定义帖子类型 slug 的 WordPress slug

Posted

技术标签:

【中文标题】没有自定义帖子类型 slug 的 WordPress slug【英文标题】:WordPress slug without custom post type slug 【发布时间】:2017-01-31 23:39:54 【问题描述】:

我已经使用以下代码注册了自定义帖子类型:

register_post_type(
         array(
            'labels'            => // array of labels,
            'public'            => true,
            'publicly_queryable'=> true,
            'show_ui'           => false,
            'map_meta_cap'      => true,
            'show_in_menu'      => false, 
            'query_var'         => true,
            'rewrite'           => array( 'slug' => 'movie' ),
            'capability_type'   => 'post',
            'has_archive'       => false,
            'exclude_from_search' => true,
            'supports'          => array('title'),
        )
);

问题是,这个帖子的 URL 变成了:

http://yourdomain.com/movie/post_slug/

但是,我需要:

http://yourdomain.com/post_slug/

有没有办法从 URL 中删除帖子类型的 slug “电影”,比如帖子和页面默认显示在前端?

谢谢

【问题讨论】:

我已经在'rewrite' => array( 'slug' => 'movie' ) 尝试过不同的参数,比如:用 false、Null、空字符串等替换“movie”,但它不起作用。 【参考方案1】:

您必须在 init 中注册您的帖子类型电影。

register_post_type('movie', $args);

要从帖子链接替换电影,请使用以下代码。

function remove_my_post_type($post_link, $post, $leavename) 

    if ($post->post_type != 'movie' || $post->post_status != 'publish') 
        return $post_link;
    

    $post_link = str_replace('/' . $post->post_type . '/', '/', $post_link);
    return $post_link;


add_filter('post_type_link', 'remove_my_post_type', 10, 3);

之后,您可以将帖子类型设置为默认帖子或页面。

function set_my_post($query) 

    if(isset($query->query['post_type']))
        return;
    

    if (!empty($query->query['name'])) 
        $query->set('post_type', array('post', 'movie', 'page'));
    


add_action('pre_get_posts', 'set_my_post');

【讨论】:

我已经尝试过了,它也可以,但问题是,这不是正确的方法。因为帖子类型“电影”的 slug 与“pages”和“posts”的 slug 冲突。【参考方案2】:

我认为没有直接的解决方案。如果你非常需要这个,你可以使用Custom Rewrite For Post Slug

【讨论】:

我喜欢直接的方式,因为我认为它可能会与帖子或页面 slug 冲突。 我搜索的太多了,但我认为这是唯一的方法,谢谢。 这并不总是有效,如果你有同名的附件,它会给它比这个解决方案更高的优先级【参考方案3】:

你试过了吗:

'with_front' => bool 是否应该在永久链接结构前面加上 前基地。 (例如:如果您的永久链接结构是 /blog/,那么 您的链接将是:false->/news/,true->/blog/news/)。默认为 真的

https://codex.wordpress.org/Function_Reference/register_post_type

【讨论】:

我试过'rewrite' => array( 'slug' => 'movie', 'with_front' => false )。但同样的结果不起作用,它会自动在前面添加“电影”slug。我还去了设置->永久链接并保存更改。【参考方案4】:

很简单:在您的args array 中设置'rewrite'-> true

【讨论】:

以上是关于没有自定义帖子类型 slug 的 WordPress slug的主要内容,如果未能解决你的问题,请参考以下文章

在函数文件中更改自定义帖子类型 slug

自定义帖子类型 Slug 冲突

自定义帖子类型 Slug 重写问题

Wordpress - 如何通过 slug 获取自定义帖子类型?

无法重命名自定义帖子类型的 slug

带有自定义 slug 的 wordpress 自定义帖子类型并获取变量