2017-08-26 2 views
2

J'ai un livre appelé Custom Post Type, et le lien est: mywebsite.com/book/mybooknameComment 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?

+0

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

+0

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

+0

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

Répondre

2

Ceci ne doit pas être en premier lieu, vous ne devriez donc pas essayer de le réparer par programme - vous devriez plutôt le corriger à la source. Essayez d'identifier la cause et réparez-la. Sinon, vous pourriez introduire d'autres problèmes sur la ligne.

Quelques solutions possibles, en fonction de la cause:

  1. RINCEZ Rewrite Cache
    Wordpress ne pas écrire dans le .htaccess redirections, il utilise rewrite rules pour analyser l'URL et trouver un match pour la redirection. Cela signifie que si vous n'actualisez pas vos règles de réécriture, les anciens liens fonctionnent toujours. Ref: SarahCoding's answer to 'Remove Old Permalinks?'

    Comment faire:
    Re sauver vos permaliens videra les règles de réécriture, mais si cela ne fonctionne pas, il y a Three Ways to Flush the Rewrite Cache in WordPress
     

  2. Vider votre cache
    Si vous avez installé des plugins Caching, ils devront être effacés. Certains plugins de sécurité utilisent également la mise en cache, par ex. Securi. Il pourrait également être mis en cache dans votre navigateur.

    Comment faire:
    Voir How to Clear Your Cache in WordPress
     

  3. Supprimer vieux permaliens WP
    Lorsque vous mettez à jour une limace, les anciens permaliens sont encore stockés dans la base de données. Cela pourrait causer des problèmes si vous voulez utiliser un slug que vous avez déjà utilisé par exemple.

    Comment faire:
    Les anciens sont permaliens stockées dans la table postmeta avec le meta_key de _wp_old_slug. Pour effacer tous les anciens limaces, exécutez cette requête dans la base de données WP:
    DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';

    Ref Mark Dave Tumanda's answer to 'Remove Old Permalinks?'
     

  4. Vérifiez Redirection Plugins
    Si vous utilisez des plug-ins de redirection , vérifiez les règles de redirection au cas où il y aurait quelque chose qui s'affronte avec vos nouvelles URLs.

0

Sur la base de votre commentaire tout ce que vous avez besoin est alors de savoir si l'URL contient/livre ... voir ci-dessous pour l'ajouter snip-it:

function books_theme_parse_request($query) { 
    global $wp; 
    $current_url = home_url($wp->request); 

    if (strpos($current_url, "/book" == false)) { return; } 

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

Comme les gens ont mentionné reference

A Avertissement sur l'utilisation de l'administrateur

Ce filtre peut également être utilisé pour affecter les requêtes d'écran d'administration. Assurez-vous de vérifier si votre modification affecte vos écrans d'édition de post. Par exemple, la simple vérification de is_main_query() et de is_post_type_archive ('movie') modifiera également la requête pour l'écran edit.php? Post_type = movie admin, sauf si vous vérifiez aussi! Is_admin()