web-dev-qa-db-fra.com

Spécifiez une page en tant que parent de l'archive CPT

J'ai une page "À propos de nous" sur mon site avec des pages enfants. J'ai créé un type de message personnalisé "History", où le slug de réécriture est "history".

J'utilise archive-cpt_history.php comme fichier modèle pour ce CPT. Tout fonctionne exactement comme il est configuré, je peux aller à website.com/history/ pour voir ma boucle CPT dans toute sa splendeur.

Le problème est que j'ai besoin de cette histoire CPT pour devenir un enfant de À propos de nous. Comment puis-je réécrire le slug sur/about-us/history pour qu'il fonctionne avec l'archive/la page de destination? Je peux le faire:

'rewrite' => array( 'slug' => '/about-us/history', 'with_front' => false ),

Mais cela ne fonctionne qu'avec les publications simples, pas l'archive/la page de destination. Toute aide serait grandement appréciée.

De plus, si cela est pertinent, une fois le problème résolu, single-cpt_history.php utilisera simplement "header (" Emplacement: ". Site_url (")); "pour rediriger les utilisateurs chez eux. Il n’existe jamais de lien permanent vers un message d’histoire individuel. La conception ne fonctionne tout simplement pas comme ça. La page de destination de l'historique affiche toujours tous les articles du CPT.

1
beefchimi

Dans vos arguments de type de publication de registre, définissez rewrite sur true et has_archive sur le chemin souhaité pour la page d'archive ( sans barre oblique):

'rewrite' => true,
'has_archive' => 'about-us/history'

En ce qui concerne la redirection, plutôt que de se rendre jusqu'au modèle, vous pouvez court-circuiter le chargement de publications uniques plus tôt et supprimer la nécessité du modèle unique de cpt:

function wpa_parse_query( $query ){
    if( is_singular() && isset( $query->query_vars['cpt_history'] ) ){
        wp_redirect( home_url() );
    }
}
add_action( 'parse_query', 'wpa_parse_query' );
1
Milo