Curieusement, je n'arrive pas à trouver quelqu'un qui pose cette question exactement de cette façon.
Est-il possible de faire d'une page un enfant d'un CPT? Répétable (voir ci-dessous pour plus d'informations) n.b. Je ne veux pas dire l'inverse - ce qui est assez facile voir: Un type d'article personnalisé peut-il avoir une page parent?
Exemple:
author
avec une structure de lien permanent: http://example.com/authors/john-doepage
pour vivre à http://example.com/authors/john-doe/thank-youEst-il possible de réaliser cette structure permalien de manière répétable? C’est-à-dire que je voudrais avoir plusieurs enfants arbitraires page
posts de type post sous les messages de type author
arbitraires?
N.b. toutes les pages d'auteurs n'auront pas besoin d'un/auteurs/nom-auteur/merci, beaucoup d'entre elles n'ont besoin de rien, d'autres peuvent avoir besoin d'un slug différent, par exemple./auteurs/jane-doe/joyeux anniversaire-voeux
Je ne peux pas vraiment penser à une manière de créer un type de page de type post et de le rendre "répétable". Comme Jake l'a dit, cela impliquera des règles de réécriture. Je pense que le moyen le plus simple de le faire serait de configurer des modèles pour tous les cas dans votre répertoire de thème et d'utiliser des vars de requête pour les renseigner. Donc, par exemple:
function wpse_add_query_vars( $vars ){
$vars[] = "tmpl";
$vars[] = "author_slug";
return $vars;
}
add_filter( 'query_vars', 'wpse_add_query_vars' );
function wpse_add_rewrite_rule() {
add_rewrite_rule( '^authors/([^/]*)/([^/]*)', 'index.php?author_slug=$matches[1]&tmpl=$matches[2]', 'top' );
}
add_action( 'init', 'wpse_add_rewrite_rule' );
function wpse_template_include( $template ) {
if ( get_query_var( 'tmpl' ) && get_query_var( 'author_slug' ) ) {
if ( file_exists( get_template_directory() . '/' . get_query_var( 'tmpl' ) . '.php' ) ) {
$template = get_template_directory() . '/' . get_query_var( 'tmpl' ) . '.php';
}
}
return $template;
}
add_filter( 'template_include', 'wpse_template_include' );
J'ai testé cela et cela fonctionne, mais il faudra probablement le peaufiner pour répondre à vos besoins. En gros, voici ce qui se passe:
tmpl
afin de pouvoir spécifier un nom de fichier modèle slug. Nous devrons créer les modèles que nous voulons dans notre dossier de thèmes./authors/author-name/template-name
, nous puissions charger un modèle (s'il existe). Assurez-vous de vider vos permaliens dans les paramètres après avoir ajouté ou modifié des règles de réécriture! template_include
pour voir si nous avons le tmpl
var défini, vérifions si nous avons un modèle dans notre répertoire de thème et le retournerons si nous l’avons. Ainsi, par exemple, si vous appuyez sur /authors/author-name/thank-you
, nous rechercherons un fichier modèle thank-you.php
dans le dossier du thème et le chargerons au lieu d’un modèle par défaut. Vous auriez accès à l'auteur slug dans le fichier de modèle en utilisant get_query_var()
.Ceci est juste un exemple abstrait et devra évidemment être peaufiné pour vos besoins, mais en utilisant cette méthode vous seriez capable de créer autant de pages que vous en avez besoin et de les maintenir directement à partir du thème. Je n’ai pas non plus créé d’auteur CPT pour le tester à fond. Vous devrez donc peut-être ajuster la règle de réécriture afin qu’elle n’entre pas en conflit avec ce que vous essayez de faire avec l’auteur CPT (en fait, vous n’aurez peut-être même pas besoin de le faire.) utilisez la requête author_slug comme elle est probablement déjà disponible chez WP).
Voici quelques ressources supplémentaires:
Bien sûr, il y a plus d'une façon de peauner un chat, mais espérons que cela vous aidera à vous orienter dans la bonne direction ou au moins à vous donner une idée de ce qui est possible.
Je ne peux pas vraiment penser à un moyen facile et répétable de faire cela, mais consultez: https://wordpress.org/support/topic/create-static-subpage-for-a-custom-post-type
Vous pouvez créer un paramètre personnalisé à la fin de votre type de publication. Une fois que vous obtenez cela, vous pouvez charger un modèle et utiliser ce paramètre pour interroger le contenu de la page.