J'ai un livre appelé Custom Post Type
, et le lien est: mywebsite.com/book/mybookname
Comment puis-je supprimer l'ancien lien permanent Type de message personnalisé après avoir réécrit l'URL pour exclure le slug?
Je veux changer cela pour que le lien est mywebsite.com/mybookname
.
J'ai ajouté le code suivant pour changer le lien et il fonctionne comme prévu:
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');
Le problème est que l'ancien lien (mywebsite.com/book/mybookname
) fonctionne toujours. Je voudrais faire ce lien aller à une page 404 sans casser les liens actuels.
J'ai essayé les suivants, mais il casse tout:
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');
Comment puis-je supprimer ancienne URL?
Vous n'êtes pas sûr que cela ait de l'importance, mais pourquoi utilisez-vous le mot espagnol pour book-> libro lorsque vous utilisez le mot anglais pour votre type de message? – fjoe
où avez-vous mis le code que vous avez essayé? Je suppose qu'il y a plus de conditions qui devraient être ajoutées, comme savoir si c'est la partie admin ou publique du site, le type de page, etc. Au fait, comment ça a tout cassé? codes erro? – Kaddath
fjoe: C'est un site web espagnol, j'ai utilisé le livre ici parce que je pense qu'il est plus facile d'obtenir de l'aide si les anglophones peuvent facilement le déconnecter, je l'ai édité. Kaddath, le code que j'ai essayé est dans books_theme_parse_request ($ query). mal éditer mon message pour le rendre plus clair. Il freine parce que partout où un livre est affiché, il se transforme en une erreur 404. Je veux seulement que le single de livre avec l'URL originale soit 404 – Aschab