Sie scheinen "teilweise ausführliche Umschreiberegeln" zu benötigen. Ausführliche Umschreiberegeln bedeuten, dass alle Seiten oben platziert werden, da WordPress den Unterschied zwischen einer Seite und einem Beitrag nicht herausfinden kann. Hier glaubt es, dass es möglich ist, da alle URLs des Formulars portfolio/([^/]+)/
aus Ihrer portfolio
Taxonomie stammen, mit Ausnahme dieser portfolio/clients/
. Sie müssen dieses über die Umschreiberegeln setzen, damit es vor der allgemeineren Portfolio-Taxonomie übereinstimmt. Sie könnten wahrscheinlich auch erzwingen, dass alle Umschreiberegeln ausführlich sind. Dies wirkt sich jedoch auf die Leistung aus, wenn Sie viele Seiten haben.
Diese Antwort wurde mit meinem soeben gewonnenen Verständnis der Umschreiberegeln geschrieben. Ich hoffe, dass dies eine gute Möglichkeit ist und der Beispielcode nicht zu viele Fehler enthält.
Eine Seite generiert nicht nur eine Umschreiberegel, sondern eine Gruppe:
(pagename)/trackback/?$
(pagename)/feed/(feed|rdf|rss|rss2|atom)/?$
(pagename)/(feed|rdf|rss|rss2|atom)/?$
(pagename)/page/?([0-9]{1,})/?$
(pagename)/comment-page-([0-9]{1,})/?$
(pagename)(/[0-9]+)?/?$
Sie müssen diese nicht selbst erstellen, sondern können die Leistung von wiederverwenden WP_Rewrite
. Schauen Sie sich die page_rewrite_rules()
Methode an: Wenn wir uns im ausführlichen Modus befinden, wird eine Liste aller Seiten (via page_uri_index()
) und ihrer Anhänge abgerufen, das %pagename%
Umschreibetag überschrieben und die Umschreiberegeln für diese Seite generiert. Das können wir auch:
// We only generate them for this page
$page_uri = 'portfolio/clients';
// Returns site root + '%pagename%'
$page_structure = $wp_rewrite->get_page_permastruct();
// Everywhere you see %pagename% in the structure used to generate rules
// in the next step, replace it with our fixed page name
$wp_rewrite->add_rewrite_tag('%pagename%', "({$page_uri})", 'pagename=');
// This generates the group given above
$page_rewrite_rules = $wp_rewrite->generate_rewrite_rules($page_structure, EP_PAGES);
Dies gibt uns die Regeln für die Seiten, aber noch nicht für die auf der Seite verwendeten Anhänge. Wenn Sie sie auch möchten, wiederholen Sie den Schritt für jeden Anhang, jedoch mit add_rewrite_tag('%pagename%', "({$attachment_uri})", 'attachment=')
(siehe page_rewrite_rules()
für weitere Details).
Gut, wir haben die Regeln, aber jetzt müssen Sie sie auf irgendeine Weise zur vollständigen Umschreibestruktur hinzufügen. Sie können dies mit tun add_rewrite_rule()
, müssen es jedoch für jede im $page_rewrite_rules
Array generierte Regel aufrufen . Aus diesem Grund schließen sich viele Leute dem rewrite_rules_array
Filter an , da Sie das Array dort einfach ändern können.
add_filter('rewrite_rules_array', 'add_verbose_portfolio_clients_page');
function add_verbose_portfolio_clients_page($rewrite_rules)
{
global $wp_rewrite;
// The previous code snippet comes here, where we generate $page_rewrite_rules
// Our rules have priority, they should be on top
$rewrite_rules = array_merge($page_rewrite_rules, $rewrite_rules);
return $rewrite_rules;
}
Nachdem Sie diesen Filter eingefügt haben, sollten Sie die Umschreiberegeln löschen (einmal, nicht bei jedem Laden einer Seite, da er ziemlich schwer ist). Sie können dies tun, indem Sie anrufen flush_rewrite_rules()
oder die Einstellungsseite "Permalinks" besuchen.