私はそれが今うまく働いているというカスタムの投稿タイプ/分類法を持っています。
次のようなURLを作成するためのカスタム書き換え規則をいくつか書きました。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');
私がやろうとしているのは、のようなURLを作成するための新しいルールを作成することです。domain.tld/postTypeName/parentTaxonomy/home
"home"
これはカスタムの投稿タイプや分類法の一部ではないので、このURLのカスタムテンプレートで作成済みのPage(lessonhome
)を使用します。
クエリ変数を追加しました:
function prefix_register_query_var($vars)
{
$vars[] = 'home';
return $vars;
}
add_filter('query_vars', 'prefix_register_query_var');
テンプレートのリダイレクトとフィルタを追加しました。
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');
新しい書き換えルールを追加しました:
$newrules['lessons/(.+)/home/?$'] = 'index.php?post_type=page&name=lessonhome&home=yes';
Custom_rewrite_rulesメソッドは次のように変更されました。
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');
しかし、それはうまくいきません - それは私をそのページにリダイレクトします:domain.tld/lessonhome
ここで何が悪いのですか?
なぜこのようにリダイレクトされているのか、私にはよくわかりませんが、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';
またはpagename
に:
$newrules['lessons/(.+)/home/?$'] = 'index.php?pagename=lessonhome&home=yes';
それはうまくいっている!