J'ai un type de message personnalisé/taxonomie qui fonctionne bien pour le moment.
J'ai écrit des règles de réécriture personnalisées pour créer des URL telles que:domain.tld/postTypeName/parentTaxonomy/childTaxonomy/postSlug
function custom_rewrite_rules($rules)
{
$newrules = array();
$newrules['lessons/(.+)/(.+)/(.+)/?$'] = 'index.php?lessons=$matches[3]';
$newrules['lessons/(.+)/?$'] = 'index.php?level=$matches[1]';
//$newrules['lessons/?$'] = 'index.php?post_type=lessons';
return array_merge($newrules, $rules);
}
add_filter('rewrite_rules_array', 'custom_rewrite_rules');
Ce que je cherche à faire, c'est de créer une nouvelle règle pour créer une URL comme:domain.tld/postTypeName/parentTaxonomy/home
"home"
il ne fait pas partie du type d'article personnalisé ni de la taxonomie et je souhaite utiliser une page déjà créée (lessonhome
) avec un modèle personnalisé pour cette URL.
Ajout d'un var de requête:
function prefix_register_query_var($vars)
{
$vars[] = 'home';
return $vars;
}
add_filter('query_vars', 'prefix_register_query_var');
Ajout d'un filtre de redirection et de template:
function prefix_url_rewrite_templates()
{
if (get_query_var('home') && is_singular('lessons'))
{
add_filter('template_include', function()
{
return get_template_directory() . '/custom-page-template.php';
});
}
}
add_action('template_redirect', 'prefix_url_rewrite_templates');
Ajout d'une nouvelle règle de réécriture:
$newrules['lessons/(.+)/home/?$'] = 'index.php?post_type=page&name=lessonhome&home=yes';
Et la méthode custom_rewrite_rules a été modifiée en:
function custom_rewrite_rules($rules)
{
$newrules = array();
$newrules['lessons/(.+)/(.+)/(.+)/?$'] = 'index.php?lessons=$matches[3]';
$newrules['lessons/(.+)/home/?$'] = 'index.php?post_type=page&name=lessonhome&home=yes';
$newrules['lessons/(.+)/?$'] = 'index.php?level=$matches[1]';
//$newrules['lessons/?$'] = 'index.php?post_type=lessons';
return array_merge($newrules, $rules);
}
add_filter('rewrite_rules_array', 'custom_rewrite_rules');
Mais ça ne marche pas - ça me redirige vers cette page: domain.tld/lessonhome
Qu'est-ce que je fais mal/manque ici?
Je ne sais vraiment pas pourquoi il fait cette redirection, mais j'ai résolu ce problème en changeant le post_type&name
$newrules['lessons/(.+)/home/?$'] = 'index.php?post_type=page&name=lessonhome&home=yes';
à page_id
:
$newrules['lessons/(.+)/home/?$'] = 'index.php?page_id=24&home=yes';
ou à pagename
:
$newrules['lessons/(.+)/home/?$'] = 'index.php?pagename=lessonhome&home=yes';
et ça marche bien!