J'ai quelques types de publication personnalisés dont je voudrais masquer ou interdire complètement les URL par défaut. Ainsi, par exemple, j'ai un type de publication personnalisé appelé organisation, et l'URL sans réécriture ressemble à ceci:
http://example.com/?organization=my-org-name
J'ai une structure de réécriture assez compliquée et fonctionnelle en place qui est une combinaison des balises taxonomie et du type de publication personnalisé afin que les utilisateurs puissent utiliser des URL telles que
http://example.com/AL/organization/my-org-name
http://example.com/CA/organization/my-org-name
etc, pour arriver à la poste en question. Tout ça marche bien. Je veux juste que rien ne se présente quand on va à l'URL par défaut. J'ai commencé à m'inquiéter à ce sujet lorsque j'ai remarqué que générer des plans Sitemap XML reprenait en quelque sorte le comportement par défaut. Je le veux parti parti parti parti, jamais trouvé en dehors de ma structure de réécriture.
METTRE À JOUR:
Je pensais que je venais de comprendre ceci en ajoutant:
,'publicly_queryable' => false
à mon code postal de type de registre. Cela empêche au moins le chargement de ces pages, mais rien ne permet de résoudre les URL redoutées apparaissant dans les sitemaps XML.
MISE À JOUR 2:
Je commence à me demander si je n'ai pas besoin de réécrire ces URL par défaut en quelque chose d'autre, mais cela impliquerait de vérifier l'URL, d'effectuer une recherche, puis ... de ne renvoyer que la première balise de taxonomie possible ??
OK, j'ai finalement compris. Et j'ai fini par devoir faire des compromis au cas où il y aurait plus d'une balise d'emplacement pour le même article, mais je suis beaucoup plus heureux de la façon dont cela fonctionne.
D'ABORD, j'ai dû changer la structure du permalink (merci Milo) comme ceci:
function get_real_link_please( $url, $post ) {
if ( $post->post_type == 'organization' ){
$loc_list = wp_get_post_terms($post->ID, 'my_locations');
$location = $loc_list[0]->slug; //get first item in case there is more than one
return home_url( $location . '/organization/' . $post->post_name, $url );
}
return $url;
}
add_filter( 'post_type_link', 'get_real_link_please', 10, 2 );
Et ALORS, je devais m'assurer que ma règle de réécriture en tenait compte:
add_action( 'init', 'cpt_rewrite_link' );
function cpt_rewrite_link(){
add_rewrite_rule( '([^/]+)/([^/]*)/([^/]*)/', 'index.php?my_locations=$matches[1]&post_type=$matches[2]&name=$matches[3]', 'top' );
}
ET FINALEMENT (très important!), Je devais m'assurer que mon cpt était effectivement interrogeable publiquement:
,'publicly_queryable' => true
La seule chose qui me rendrait plus heureux serait de trouver un moyen d’avoir plusieurs permaliens pour plusieurs emplacements, mais puisque les autres liens fonctionneront, il est correct d’avoir le premier emplacement "officiel". J'espère que ça aide quelqu'un d'autre, c'était un ours.