web-dev-qa-db-ja.com

カスタムページ/テンプレートを指すポストタイプの書き換え規則

私はそれが今うまく働いているというカスタムの投稿タイプ/分類法を持っています。

次のような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
ここで何が悪いのですか?

1
Philip

なぜこのようにリダイレクトされているのか、私にはよくわかりませんが、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';

それはうまくいっている!

0
Philip