我有一个Custom Post Type
称为书,并且链接是:mywebsite.com/book/mybookname
如何在重写URL以排除子弹后删除旧的自定义帖子类型固定链接?
我想改变这一点,以便链接mywebsite.com/mybookname
。
我加入以下代码更改的链接,它按预期工作:
function books_theme_remove_slug($post_link, $post, $leavename) {
if ('book' != $post->post_type || 'publish' != $post->post_status) {
return $post_link;
}
$post_link = str_replace('/' . $post->post_type . '/', '/', $post_link);
return $post_link;
}
add_filter('post_type_link', 'books_theme_remove_slug', 10, 3);
function books_theme_parse_request($query) {
if (! $query->is_main_query() || 2 != count($query->query) || ! isset($query->query['page'])) {
return;
}
if (! empty($query->query['name'])) {
$query->set('post_type', array('post', 'book', 'page'));
}
}
add_action('pre_get_posts', 'books_theme_parse_request');
的问题是,旧的链接(mywebsite.com/book/mybookname
)仍正常工作。我想让链接转到404页面而不会打破当前链接。
我尝试以下,但它打破了一切:
function books_theme_parse_request($query) {
if(isset($query->query['post_type']) && $query->query['post_type'] == 'book'){
global $wp_query;
$wp_query->set_404();
status_header(404);
get_template_part(404); exit();
}
if (! $query->is_main_query() || 2 != count($query->query) || ! isset($query->query['page'])) {
return;
}
if (! empty($query->query['name'])) {
$query->set('post_type', array('post', 'book', 'page'));
}
}
add_action('pre_get_posts', 'books_theme_parse_request');
如何删除旧的网址是什么?
不知道这事,但你为什么要使用书本 - 西班牙语单词>时,根据您的其他代码你正在使用您的文章类型英文单词LIBRO? – fjoe
你把你试过的代码放在哪里?我想应该增加更多的条件,比如要知道这是网站的管理员或公共部分,页面的类型等。顺便说一句,它是如何打破一切的?错误代码? – Kaddath
fjoe:它是一个西班牙语网站,我在这里使用了书籍,因为我认为如果说英语的人可以很容易地获得帮助,我更容易获得帮助,所以我编辑了它。 Kaddath,我试过的代码是在books_theme_parse_request($ query)中。虐待编辑我的帖子,使其更清晰。它会让它刹车,因为在任何地方显示的书都会变成404错误。我只想要与原始网址的书单是404 – Aschab