「部分的な詳細な書き換えルール」が必要なようです。詳細な書き換えルールとは、WordPressがページと投稿の違いを理解できないため、すべてのページが上に配置されることを意味します。ここでは、フォームのすべてのURLがこの分類を除いportfolio/([^/]+)/
てportfolio
分類からのものであるため、可能だと考えていますportfolio/clients/
。これを書き換えルールの上に置く必要があるため、より一般的なポートフォリオ分類の前に一致します。また、すべての書き換えルールを強制的に冗長にすることもできますが、ページ数が多い場合はパフォーマンスに影響します。
この回答は、書き直しのルールを理解したばかりで書かれているので、それが良い方法であり、サンプルコードにエラーが多すぎないことを願っています。
ページは1つの書き換えルールだけを生成するのではなく、グループを生成します。
(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]+)?/?$
これらを自分で作成する必要はありませんWP_Rewrite
。の機能を再利用できます。そのpage_rewrite_rules()
メソッドを見てください。冗長モードの場合、すべてのページ(を介してpage_uri_index()
)とその添付ファイルのリストを取得し、%pagename%
書き換えタグを上書きして、このページの書き換えルールを生成します。これもできます:
// 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);
これにより、ページのルールがわかりますが、ページで使用されている添付ファイルのルールはまだわかりません。それらも必要な場合は、添付ファイルごとに手順を繰り返しますが、add_rewrite_tag('%pagename%', "({$attachment_uri})", 'attachment=')
(詳細についてはpage_rewrite_rules()
を参照してください)。
ルールはわかりましたが、何らかの方法で完全な書き換え構造に追加する必要があります。これはで実行できますがadd_rewrite_rule()
、$page_rewrite_rules
配列で生成されたすべてのルールに対して呼び出す必要があります。このため、配列を変更するだけでよいので、多くの人がrewrite_rules_array
フィルターにフックします。
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;
}
このフィルターを組み込んだ後、書き換えルールをフラッシュする必要があります(非常に重いため、ページをロードするたびに1つではありません)。これを行うには、を呼び出すflush_rewrite_rules()
か、[パーマリンク]設定ページにアクセスします。