J'ai une sorte de question unique à laquelle je suis en train de réfléchir. Google nous pénalise avec le contenu en double, car vous pouvez accéder à nos articles de blog simples en allant à:
http://www.domain.com/blog/the-post-slug
aussi bien que :
http://www.domain.com/the-post-slug
L'option que nous voulons vraiment est:
http://www.domain.com/blog/the-post-slug
et si un utilisateur ou googlebot arrive à goto:
http://www.domain.com/the-post-slug
redirige les vers:
http://www.domain.com/blog/the-post-slug
Je sais que la situation est particulière, mais nous avons de nombreux types de publication personnalisés dans notre système. Donc, notre structure ressemble à ceci.
http://www.domain.com/food/pizza
http://www.domain.com/ice-cream/strawberry
http://www.domain.com/fireworks/bottle-rockets
Idéalement, ce que je voudrais faire est de trouver un type de filtre qui vérifie logiquement si le post_type est post et redirige:
http://www.domain.com/the-post-slug
à
http://www.domain.com/blog/post-slug
J'ai essayé de modifier le register_post_type pour l'objet post, d'ajouter with_front => false et d'ajouter le blog au slug, mais cela ne fonctionne pas.
J'ai pu ajouter/blog /% postname%/à la structure de lien permanent, et j'ai réussi à obtenir une structure décente qui fonctionnait, mais je suis resté bloqué sur les taxonomies. Quand je suis allé sur une page de taxonomie, je devais aller à:
http://www.domain.com/blog/the-taxonomy/flavors
et:
http://www.domain.com/the-taxonomy/flavors
me donnait un 404. Donc, même si je peux trouver un moyen de faire en sorte que les taxonomies fonctionnent là où je peux le faire:
http://www.domain.com/the-taxonomy/flavors
ce serait génial! Comme autre remarque, j'ai également ajouté with_front à register_taxonomy, mais cela ne faisait rien non plus. J'ai même bousculé les réécritures sur tous les changements que j'ai faits.
Je sais que c'est beaucoup, mais mon cerveau ne peut pas aller plus loin .. lol
TIA!
Avez-vous un aperçu de cela?
Tout d’abord, définissez votre structure de lien permanent sur /%postname%
.
Après cela, ajoutez une règle de réécriture pour réécrire toutes les requêtes telles que example.com/blog/postname
dans la requête appropriée:
add_action('init', 'blog_front');
function blog_front() {
add_rewrite_rule('^blog/([^/]+)/?','index.php?name=$matches[1]','top');
}
Maintenant, vous devez empêcher l'URL en double, en envoyant une redirection 301 lorsque example.com/postname
est demandé:
add_action('template_redirect', 'say_hello_to_google');
function say_hello_to_google() {
if ( is_main_query() && is_single() && ( empty( get_post_type() ) || (get_post_type() === 'post') ) ) {
if ( strpos( trim( add_query_arg( array() ), '/' ), 'blog' ) !== 0 ) {
global $post;
$url = str_replace( $post->post_name, 'blog/' . $post->post_name, get_permalink( $post ) );
wp_safe_redirect( $url, 301 );
exit();
}
}
}
Enfin, vous devez créer un lien permanent pour votre message avec "blog /" devant:
add_filter('the_permalink', 'post_permalink_w_blog');
function post_permalink_w_blog( $link ) {
global $post;
if ( $post->post_type === 'post' ) {
$link = str_replace( $post->post_name, 'blog/' . $post->post_name, get_permalink( $post ) );
}
return $link;
}
La dernière chose à faire est de vider les règles de réécriture et ... test.
Comme @ Milo indiqué dans les commentaires, vous pouvez éviter tout cela en définissant la structure permalink sur /blog/%postname%
, puis en utilisant le paramètre 'rewrite'
ayant 'with_front'
à false
pour tous les CPT et toutes les taxonomies.
'rewrite' => array( 'with_front' => false )
Le problème est que la plupart du temps, dans un WP moyen avec beaucoup de CPT et de taxonomies, il y a des chances que certaines d'entre elles soient enregistrées via des plugins tiers ... dans ce cas, si ces plugins enregistrent le Les TPC/taxonomies n'utilisant pas 'with_front' => false
c'est un problème et la solution indiquée ci-dessus est la dernière chance.
En plus, je dois dire que les catégories et les balises standard sont enregistrées avec 'with_front' = true. Par conséquent, si vous utilisez cette méthode alternative, la catégorie et les balises standard doivent être réenregistrées avec with_front
param défini à false
.