it-swarm.com.de

Umschreibungsregel für Beitragstyp, um auf eine benutzerdefinierte Seite/Vorlage zu verweisen

Ich habe einen benutzerdefinierten Post-Typ/eine Taxonomie, die im Moment einwandfrei funktioniert.

Ich habe einige benutzerdefinierte Regeln zum Umschreiben geschrieben, um URLs zu erstellen:
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');

Was ich versuche zu tun, ist, eine neue Regel zu erstellen, um eine URL wie folgt zu erstellen:
domain.tld/postTypeName/parentTaxonomy/home

"home" ist nicht Teil des benutzerdefinierten Beitragstyps oder der Taxonomie und ich möchte eine bereits erstellte Seite (lessonhome) mit einer benutzerdefinierten Vorlage für diese URL verwenden.

Abfragevariable hinzugefügt:

function prefix_register_query_var($vars) 
{
  $vars[] = 'home';

  return $vars;
}
add_filter('query_vars', 'prefix_register_query_var');

Eine Vorlagenumleitung und ein Filter wurden hinzugefügt:

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');

Neue Rewrite-Regel hinzugefügt:

$newrules['lessons/(.+)/home/?$'] = 'index.php?post_type=page&name=lessonhome&home=yes';

Und die custom_rewrite_rules-Methode wurde geändert in:

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');

Aber es funktioniert nicht - es leitet mich auf diese Seite weiter: domain.tld/lessonhome
Was mache ich falsch/fehlt hier?

1
Philip

Ich weiß wirklich nicht, warum diese Weiterleitung durchgeführt wird, aber ich habe dies durch Ändern des post_type&name behoben.

$newrules['lessons/(.+)/home/?$'] = 'index.php?post_type=page&name=lessonhome&home=yes';

zu page_id:

$newrules['lessons/(.+)/home/?$'] = 'index.php?page_id=24&home=yes';

oder zu pagename:

$newrules['lessons/(.+)/home/?$'] = 'index.php?pagename=lessonhome&home=yes';

und es funktioniert gut!

0
Philip