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

时间:2016-09-23 07:35:41

标签: php wordpress url-rewriting custom-post-type slug

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

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'),
        )
);

问题在于,此帖子的网址如下:

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

但是,我需要:

http://yourdomain.com/post_slug/

有没有办法删除帖子类型slug"电影"来自URL,默认情况下会在前端显示帖子和页面吗?

由于

4 个答案:

答案 0 :(得分:3)

您必须在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');

答案 1 :(得分:2)

你试过了吗?

  

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

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

答案 2 :(得分:2)

我认为没有直接解决方案。如果您需要这么做,可以使用Custom Rewrite For Post Slug

答案 3 :(得分:-2)

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