他の答えの束を組み合わせた後、私はそれを機能させました!これに苦労しているあなたのためのソリューションはここにあります:
この記事とこの1はそれらの人に感謝して、いくつかの私を助けました。
このすべてのコードに加えて、最初のカスタム投稿タイプと分類登録コードがfunctions.php
ファイルに含まれていることに注意してください。
カスタム投稿タイプとタクソノミーを定義する際に、まずスラッグを正しく取得します。カスタム投稿タイプの場合はそれでbasename/%taxonomy_name%
あり、タクソノミーのスラッグはちょうどである必要がありbasename
ます。また'hierarchical' => true
、URLにネストされた用語を取得するために、分類書き換え配列に追加することを忘れないでください。また、両方のケースでquery_var
がに設定さtrue
れていることを確認してください。
新しい書き換えルールを追加して、WordPressがURL構造の解釈方法を認識できるようにする必要があります。私の場合、uriのカスタム投稿タイプの部分は常に5番目のuriセグメントになるため、それに応じて一致ルールを定義しました。使用するURIセグメントの数を増減する場合は、これを変更する必要がある場合があることに注意してください。ネストされた用語のレベルが異なる場合、最後のuriセグメントがカスタム投稿タイプか分類用語かを確認する関数を作成して、追加するルールを確認する必要があります(ヘルプが必要な場合はお問い合わせください)それ)。
add_filter('rewrite_rules_array', 'mmp_rewrite_rules');
function mmp_rewrite_rules($rules) {
$newRules = array();
$newRules['basename/(.+)/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type_name=$matches[4]'; // my custom structure will always have the post name as the 5th uri segment
$newRules['basename/(.+)/?$'] = 'index.php?taxonomy_name=$matches[1]';
return array_merge($newRules, $rules);
}
次に、このコードを追加%taxonomy_name%
して、カスタムポストタイプ書き換えスラグ構造での処理方法をWorkpressに許可する必要があります。
function filter_post_type_link($link, $post)
{
if ($post->post_type != 'custom_post_type_name')
return $link;
if ($cats = get_the_terms($post->ID, 'taxonomy_name'))
{
$link = str_replace('%taxonomy_name%', get_taxonomy_parents(array_pop($cats)->term_id, 'taxonomy_name', false, '/', true), $link); // see custom function defined below
}
return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);
Wordpress独自のカスタム関数を作成しましたget_category_parents
:
// my own function to do what get_category_parents does for other taxonomies
function get_taxonomy_parents($id, $taxonomy, $link = false, $separator = '/', $nicename = false, $visited = array()) {
$chain = '';
$parent = &get_term($id, $taxonomy);
if (is_wp_error($parent)) {
return $parent;
}
if ($nicename)
$name = $parent -> slug;
else
$name = $parent -> name;
if ($parent -> parent && ($parent -> parent != $parent -> term_id) && !in_array($parent -> parent, $visited)) {
$visited[] = $parent -> parent;
$chain .= get_taxonomy_parents($parent -> parent, $taxonomy, $link, $separator, $nicename, $visited);
}
if ($link) {
// nothing, can't get this working :(
} else
$chain .= $name . $separator;
return $chain;
}
次に、パーマリンクをフラッシュする必要があります(パーマリンク設定ページを読み込むだけです)。
うまくいけば、すべてがうまくいくはずです!多数の分類用語を作成し、それらを正しくネストしてから、いくつかのカスタム投稿タイプの投稿を作成し、それらを正しく分類します。slugを使用してページを作成することもできbasename
、すべてが質問で指定したとおりに機能します。いくつかのカスタム分類アーカイブページを作成して、外観を制御し、ある種の分類ウィジェットプラグインを追加して、ネストされたカテゴリをサイドバーに表示できます。
それがあなたを助けることを願っています!