更新情報
2021.02.15
【D-01】【D-02】で、カスタム投稿タイプのアーカイブページでのページ送りに関する記述が抜けていたので、追加しました! ご指摘ありがとうございました!!

こんにちは、asです
前回の記事をもとにカスタムタクソノミーを作ると、パーマリンクがもっとこうだったらと思うこともあるかと思います。
その場合にどうやって変更するのか、数パターンに分けてまとめていきます(^^)
難易度というか、手間かからない順です(笑)
とても長くなったので、デフォルトのパーマリンク項目のところに早見表を作成してあります。

カスタム投稿タイプ、カスタムタクソノミーのパーマリンク

前回の記事をもとにカスタムタクソノミーを作ると、カスタムタクソノミーのパーマリンクは下記のようになっていると思います。

ちなみに、登録したスラッグは下記の通りです。
カスタム投稿タイプ:ownersblog
階層化カスタムタクソノミー:ownersblog-cat
└ターム:親 tabearuki 子 wasyoku
階層なしカスタムタクソノミー:ownersblog-tag
└ターム:italian-tag

デフォルトのパーマリンク

わかりやすくするため、カスタム投稿タイプ名を赤色に、カスタムタクソノミー名を青色、ターム名を緑色にしています。

カスタム投稿タイプ記事一覧ページ(archive-ownersblog.php)
http://サイトアドレス/カスタム投稿タイプ名/
http://libre-co.com/ownersblog/

タクソノミーページ(taxonomy.php)
階層化タイプ:
http://サイトアドレス/カスタムタクソノミー名/親ターム名/子ターム名/
http://libre-co.com/ownersblog-cat/tabearuki/wasyoku/

階層なしタイプ:
http://サイトアドレス/カスタムタクソノミー名/ターム名/
http://libre-co.com/ownersblog-tag/italian-tag/
*タクソノミーページにはカスタム投稿タイプ名が入りません。

記事詳細ページ(single-ownersblog.php)
http://サイトアドレス/カスタム投稿タイプ名/投稿名/
http://libre-co.com/ownersblog/はじめてのつぶやき/
*記事詳細ページにはカスタムタクソノミー名ターム名が入りません。


カスタム投稿タイプの記事一覧ページは問題ないですね!
ただ、記事詳細ページは運用次第ですが、タクソノミーページにカスタム投稿タイプ名が入らないのは、少しわかりにくい印象です。

実現したいパーマリンクを探す早見表

記事がとても長くなったので、早見表を作成しました(^^)
それぞれの項目へジャンプします。

【A】詳細ページの投稿名をスラッグから投稿IDにする
http://サイトアドレス/カスタム投稿タイプ名/投稿ID/

【B】タクソノミーページを「/カスタム投稿タイプ名/任意の単語/ターム名/」にする
http://サイトアドレス/カスタム投稿タイプ名/任意の単語/親ターム名/子ターム名/

【C】タクソノミーページは「/カスタム投稿タイプ名/ターム名/」にし、詳細ページにもターム名をいれる(子タームは使用しない、タグタイプのタクソノミー)
■タクソノミーページ
http://サイトアドレス/カスタム投稿タイプ名/ターム名/
■記事詳細ページ
http://サイトアドレス/カスタム投稿タイプ/ターム名/投稿名スラッグ/

【D】Cタイプで、子タームも使用する
【D-01】パターン01:投稿スラッグは投稿IDにする
■タクソノミーページ
http://サイトアドレス/カスタム投稿タイプ名/親ターム名/子ターム名/
■記事詳細ページ
http://サイトアドレス/カスタム投稿タイプ名/親ターム名/子ターム名/投稿ID/


【D-02】パターン02:投稿名はスラッグのままで親タームを選択させない様にする
■タクソノミーページ
http://サイトアドレス/カスタム投稿タイプ名/子タームを持たない親ターム名/
http://サイトアドレス/カスタム投稿タイプ名/親ターム名/子ターム名/
■記事詳細ページ
http://サイトアドレス/カスタム投稿タイプ名/親ターム名/子ターム名/投稿名スラッグ/

まずは記事詳細ページから。
投稿名のところは、デフォルトでは投稿画面で指定した日本語または英語の単語(スラッグ)ですが、これを投稿IDにする場合の手順です。
記事が複数のタームやタクソノミーに該当する場合パーマリンクは簡素にしておきたい場合などに。
下記の様なパーマリンクになります。

記事詳細ページ
http://サイトアドレス/カスタム投稿タイプ名/投稿ID/
http://libre-co.com/ownersblog/15/

/*	カスタム投稿のパーマリンク設定
-----------------------------------------------------*/
//カスタム投稿タイプのパーマリンクを投稿IDに変更する。
add_filter('post_type_link', 'generateCustomPostLink', 1, 2);
add_filter('rewrite_rules_array', 'addRewriteRules');

function generateCustomPostLink($link, $post){
 if($post->post_type === 'ownersblog'){
 //投稿IDに書き換えたパーマリンク文字列を返す
  return home_url('/ownersblog/'.$post->ID);
 } else {
  return $link;
 }
}

//投稿IDに書き換えたパーマリンクに対応したクエリルールを追加
function addRewriteRules($rules){
 $new_rule = array(
  'ownersblog/([0-9]+)/?$' => 'index.php?post_type=ownersblog&p=$matches[1]'
 );
 //ルール配列に結合
 return $new_rule + $rules;
}

まずは一番手軽な方法から。
タクソノミーページを下記のパーマリンクに変更したいと思います!

タクソノミーページ
http://サイトアドレス/カスタム投稿タイプ名/任意の単語/親ターム名/子ターム名/
http://libre-co.com/ownersblog/category/tabearuki/wasyoku/

先にコード内容を。

register_taxonomy( //カテゴリー形式
 'ownersblog-cat', //★カスタムタクソノミー名
 'ownersblog', //★紐づける投稿タイプ名、デフォルト分類に使う場合はpost、page
 array(
  'label' => 'つぶやきカテゴリー',  //★管理画面で表示する名前
  'labels' => array(
   'add_new_item' => '新規カテゴリーを追加' //★管理画面で表示する名前
  ),
  'public' => true, //投稿タイプをパブリックにするか (true/false)
  'hierarchical' => true, //カテゴリーのような階層構造にするかどうか (true/false)
  'show_in_rest' => true, //新エディタ Gutenberg を有効化
  'show_admin_column'=> true, //管理画面の記事一覧に項目を作るか (true/false)
     
  'rewrite' => array( 
   'slug' => 'ownersblog/category', //書き換え後のスラッグ
   //'with_front' => false //通常投稿のパーマリンク構造を引き継ぐかどうか (true/false)
   'hierarchical' => true //階層化したURLを使用可能にする
  )
 )
);
		
// 書き換えたスラッグに対応したリライトルールを追加
//★スラッグを実際に合わせて変更
//★ownersblogはカスタム投稿タイプ名、ownersblog-catはカスタムタクソノミー名を挿入
add_rewrite_rule('ownersblog/category/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[1]', 'top');

//リダイレクト処理
add_action( 'template_redirect', 'my_redirect' );
function my_redirect() {
	$url_now = $_SERVER['REQUEST_URI'];
	 if($url_now == "/ownersblog/category/"){  //★リダイレクトさせたいurl
    $url = home_url('/ownersblog/', 'http'); //★リダイレクト先のurl
    wp_safe_redirect( $url, 301 );
    exit();
  }
}

functions.phpでカスタムタクソノミーを登録した際のregister_taxonomyの中で、rewrite設定を追加します。
パラメーターの'slug''カスタム投稿タイプ名/任意の単語'に変更すると、パーマリンクからカスタムタクソノミー名の表示をなくすだけでなく、どの投稿タイプに属するのか分かりやすくなります(^^)
また直接URLから任意の単語を削除してもエラーにならず、カスタム投稿タイプの記事一覧ページになります。
ここでは、'ownersblog-cat'を'ownersblog/category'に書き換えます。(15行目)

続いて、このままだと新しいパーマリンクにアクセスしても404エラーになるので、リライトルールを追加します。(25行目)

さらに、http://libre-co.com/ownersblog/category/にアクセスした場合も404エラーにならない様に、カスタム投稿タイプの記事一覧ページへリダイレクトさせておくと安心かと思います。(28行目以降)

functions.phpを修正した際は、管理画面の「パーマリンク設定」「変更を保存」クリックしてデータベースを更新する作業が必要ですのでお忘れなく。

変更後のパーマリンク

これでタクソノミーページのパーマリンクが目標通りになりました♪
一応まとめて書いておくと、下記の様な感じです。
記事詳細ページのスラッグを投稿名から投稿IDにしたい場合は、前の項を参考ください。併用できます(^^)

カスタム投稿タイプ記事一覧ページ
http://サイトアドレス/カスタム投稿タイプ名/
http://libre-co.com/ownersblog/

タクソノミーページ
http://サイトアドレス/カスタム投稿タイプ名/任意の単語/親ターム/子ターム/
http://libre-co.com/ownersblog/category/tabearuki/wasyoku/

記事詳細ページ
http://サイトアドレス/カスタム投稿タイプ名/投稿名/
http://libre-co.com/ownersblog/はじめてのつぶやき/

この方法が一番手間ですが、今回一番検証したかった大本命です。
タクソノミーページはタクソノミー名を抜き、変わりに投稿タイプ名を表示させたい。
詳細ページにはターム名も含めたい。
こんな感じ。

タクソノミーページ
http://サイトアドレス/カスタム投稿タイプ名/ターム名/
http://libre-co.com/ownersblog/tabearuki/

記事詳細ページ
http://サイトアドレス/カスタム投稿タイプ/ターム名/投稿名/
http://libre-co.com/ownersblog/tabearuki/はじめてのつぶやき/

まずは記事詳細ページにターム名を追加します。
ここはスクラッチじゃ大変なので、おとなしくプラグインを使用します(^^)

Custom Post Type Permalinks』というプラグインを使用します。
ダウンロードして有効化すると、管理画面の「パーマリンク設定」の下部に「カスタム投稿タイプのパーマリンク設定」という項目が追加されます。
パーマリンクを「/%ownersblog-cat%/%postname%/」にしておきます。
「カスタマイズされたカスタムタクソノミーのパーマリンクを使用する」にもチェックを入れます。


image

これでパーマリンクは下記の様になりました。

タクソノミーページ
http://libre-co.com/ownersblog/ownersblog-cat/tabearuki/
http://libre-co.com/ownersblog/ownersblog-tag/italian-tag/

記事詳細ページ
http://libre-co.com/ownersblog/tabearuki/はじめてのつぶやき/

記事詳細ページは目標通りになりました!
あともう一息です!
タクソノミーページのパーマリンクからカスタムタクソノミー名の/ownersblog-cat/をはずしていきます。

ここからはfunctions.phpに記載します。

functions.phpに以下を追加し、タクソノミーページのパーマリンクからタクソノミー名を削除し、リライトルールを設定します。
ページ送りにも対応できる様に12行目も加えます。

/*	カスタム投稿のパーマリンク設定
-----------------------------------------------------*/
//パーマリンクからタクソノミー名を削除
function my_custom_post_type_permalinks_set($termlink, $term, $taxonomy){
  return str_replace('/'.$taxonomy.'/', '/', $termlink);
}
add_filter('term_link', 'my_custom_post_type_permalinks_set',11,3);

//カスタムタクソノミーアーカイブ用のリライトルールを追加 ページ送り時もリライト
//★それぞれownersblogはカスタム投稿タイプ名、ownersblog-catはカスタムタクソノミー名を挿入

add_rewrite_rule('ownersblog/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[1]', 'top');
add_rewrite_rule('ownersblog/([^/]+)/page/([0-9]+)/?$', 'index.php?ownersblog-cat=$matches[1]&paged=$matches[2]', 'top');

【C】の方法だと、タクソノミーに属さない投稿の詳細ページが404になってしまいますので対策します。
必ずカテゴリーを選択する様にすれば問題ないのですが、うっかり忘れることもあるかもしれません。
その時のために、あらかじめ選択なしで公開した際に特定のタクソノミーを選択させる様にしておきましょう!

functions.phpに加筆します。
ownersblog(カスタム投稿タイプ名)、ownersblog-cat(カスタムタクソノミー名)を適宜書き換え、選択させたいタームIDを指定してください。

/*
	タクソノミー未選択時に特定のタームを選択させる
----------------------------------------------------- */
function add_defaultcategory_automatically($post_ID) {
  global $wpdb;
  //カスタムタクソノミーのタームを取得
  $curTerm = wp_get_object_terms($post_ID, 'ownersblog-cat');//★カスタムタクソノミー名
  //既存のターム指定数が未設定の時に特定のタームを指定
  if (0 == count($curTerm)) {
    $defaultTerm= array(1);//★選択させたいタームID
    wp_set_object_terms($post_ID, $defaultTerm, 'ownersblog-cat');//★カスタムタクソノミー名
  }
}
// ownersblogを作成する際に指定
add_action('publish_ownersblog', 'add_defaultcategory_automatically');//★publish_カスタム投稿タイプ名

これでうっかり何もタクソノミーを選択せず公開すると、タームID:1の「その他」のカテゴリーに勝手にチェックが入る様になりました!

functions.phpを修正した際は、管理画面の「パーマリンク設定」「変更を保存」クリックしてデータベースを更新する作業が必要ですのでお忘れなく。

変更後のパーマリンク

これで、パーマリンクは目標の下記になりました!
階層なしのタクソノミーの場合や、子タームを使わない場合はこれでOKです!
ただ、子タームがある場合、そのタクソノミーページが404になってしまいます。
子ターム使うよって場合は次の項目:Dタイプへ。

カスタム投稿タイプ記事一覧ページ
http://サイトアドレス/カスタム投稿タイプ名/
http://libre-co.com/ownersblog/

タクソノミーページ
http://サイトアドレス/カスタム投稿タイプ名/ターム名/
http://libre-co.com/ownersblog/tabearuki/

記事詳細ページ
http://サイトアドレス/カスタム投稿タイプ名/ターム名/投稿名/
http://libre-co.com/ownersblog/tabearuki/はじめてのつぶやき/

ここまでだと多くのブログに書かれていたりしてすんなりいくのですが、カスタムタクソノミーに階層を持たせた場合(子タームがある場合)だとうまくいきません。。。
子タームのタクソノミーページが404になってしまいます。
基本のパーマリンクが階層を持っていないので、リライトルールが複雑化してしまうのだと思います。

まずはパーマリンクのおさらいです(タクソノミー構成が下記の場合)。

・食べ歩き tabearuki
└和食 wasyoku
・その他 others(親のみのターム)

タクソノミーページ
基本:http://サイトアドレス/?カスタムタクソノミー名=親・子ターム名/
親 http://libre-co.com/?ownersblog-cat=tabearuki
  http://libre-co.com/?ownersblog-cat=others
子 http://libre-co.com/?ownersblog-cat= wasyoku

目標
親 http://サイトアドレス/カスタム投稿タイプ名/ターム名/
  http://libre-co.com/ownersblog/others/
子 http://サイトアドレス/カスタム投稿タイプ名/親ターム名/子ターム名/
  http://libre-co.com/ownersblog/tabearuki/wasyoku/


記事ページ
基本:http://サイトアドレス/?カスタム投稿タイプ名=投稿名
親 http://libre-co.com/?ownersblog=投稿名
子 http://libre-co.com/?ownersblog=投稿名

目標
親 http://サイトアドレス/カスタム投稿タイプ名/親ターム名/子ターム名/投稿名/
  http://libre-co.com/ownersblog/others/投稿名/ (←親のみのターム)
子 http://libre-co.com/ownersblog/tabearuki/wasyoku/投稿名/


リライトルールがかなり複雑化するので、下記2パターンに分けて対応します!
【D-01】パターン01:投稿スラッグは投稿IDにする
【D-02】パターン02:投稿名はスラッグのままで親タームを選択させない様にする
やっぱり楽な順です(^^)
※【C】までの手順は同じです。

記事詳細ページのパーマリンクを投稿名ではなく、投稿IDでOKな場合は手軽です(^^)
まず、【C】のSTEP01で設定した「カスタム投稿タイプのパーマリンク設定」のパーマリンクを「/%ownersblog-cat%/%post_id%/」に変更します。

image

そして【C】のSTEP02のリライトの部分を子タームに対応させて下記の様に書き換えます。

//親タームに属する記事ページ
add_rewrite_rule('ownersblog/([^/]+)/([0-9]+)/?$', 'index.php?post_type=ownersblog&p=$matches[2]', 'top');
//親ターム一覧ページ
add_rewrite_rule('ownersblog/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[1]', 'top');
//子ターム一覧ページ
add_rewrite_rule('ownersblog/([^/]+)/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[2]', 'top');

ページ送りのことも考えた全記述は以下のとおり。
【C】のSTEP03で書いたカテゴリー未選択記事の404対策も忘れずに入れます。

Custom Post Type Permalinks』の設定をしたら、functions.phpに下記を記載すればOKです(^^)

functions.phpを修正した際は、管理画面の「パーマリンク設定」「変更を保存」クリックしてデータベースを更新する作業が必要ですのでお忘れなく。
/*	カスタム投稿のパーマリンク設定
-----------------------------------------------------*/
//パーマリンクからタクソノミー名を削除
function my_custom_post_type_permalinks_set($termlink, $term, $taxonomy){
   return str_replace('/'.$taxonomy.'/', '/', $termlink);
}
add_filter('term_link', 'my_custom_post_type_permalinks_set',11,3);

//リライトルールの追加	
//★それぞれownersblogはカスタム投稿タイプ名、ownersblog-catはカスタムタクソノミー名を挿入

//↓カスタム投稿タイプの一覧ページ
add_rewrite_rule('ownersblog/page/([0-9]+)/?$', 'index.php?post_type=ownersblog&paged=$matches[1]', 'top');

//↓親タームに属する記事ページ
add_rewrite_rule('ownersblog/([^/]+)/([0-9]+)/?$', 'index.php?post_type=ownersblog&p=$matches[2]', 'top');

//↓親ターム一覧ページ
add_rewrite_rule('ownersblog/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[1]', 'top');
add_rewrite_rule('ownersblog/([^/]+)/page/([0-9]+)/?$', 'index.php?ownersblog-cat=$matches[1]&paged=$matches[2]', 'top');

//↓子ターム一覧ページ
add_rewrite_rule('ownersblog/([^/]+)/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[2]', 'top');
add_rewrite_rule('ownersblog/([^/]+)/([^/]+)/page/([0-9]+)/?$', 'index.php?ownersblog-cat=$matches[1]&paged=$matches[2]', 'top');
		

/*	タクソノミー未選択公開時にデフォルトで特定のタームを選択させる
-----------------------------------------------------*/
function add_defaulttaxonomy($post_ID) {
  global $wpdb;
  //カスタム分類のタームを取得
  $curTerm = wp_get_object_terms($post_ID, 'ownersblog-cat');//★カスタムタクソノミー名
  //ターム指定数が未設定の時に特定のタームを指定
  if (0 == count($curTerm)) {
    $defaultTerm= array(1);//★選択させたいタームID
    wp_set_object_terms($post_ID, $defaultTerm, 'ownersblog-cat');//★カスタムタクソノミー名
  }
}
//カスタム投稿
add_action('publish_ownersblog', 'add_defaulttaxonomy');//★publish_カスタム投稿タイプ名

変更後のパーマリンク

これで、なんとかパーマリンクは目標の下記になりました!

カスタム投稿タイプ記事一覧ページ
http://サイトアドレス/カスタム投稿タイプ名/
http://libre-co.com/ownersblog/

タクソノミーページ
http://サイトアドレス/カスタム投稿タイプ名/親ターム名/子ターム名/
http://libre-co.com/ownersblog/tabearuki/wasyoku/

記事詳細ページ
http://サイトアドレス/カスタム投稿タイプ名/親ターム名/子ターム名/投稿ID/
http://libre-co.com/ownersblog/tabearuki/wasyoku/15/

リライトルールで、親子のタームを切り分けるのが(私の力量では)非常に難しいので、子タームがある親タームは選択できない様にしておくことにしました!

下記の「食べ歩き」、「簡単レシピ」は選択できなくさせちゃいます。
階層のない「その他」だけ、別にリライトルールに書くことに。

・食べ歩き
├和食
├イタリアン
└スイーツ
・簡単レシピ
├メインディッシュ
├サイドメニュー
└デザート
・その他


子ターム分のリライトルールを加えます。
パーマリンク に合わせて /([^/]+)/ を増やしました。

add_rewrite_rule('ownersblog/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[1]', 'top');
add_rewrite_rule('ownersblog/([^/]+)/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[2]', 'top');

これだと親タームに属する詳細ページ(/ownersblog/others/投稿名/)と子タームの一覧(/ownersblog/tabearuki/wasyoku/)が見分けられません。

そこで、子タームを持たない親タームだけのターム(紛らわしい!)である、「その他(others)」のタームだけ別に記述することに。(1行目)

add_rewrite_rule('ownersblog/others/([^/]+)/?$', 'index.php?ownersblog=$matches[1]', 'top');
add_rewrite_rule('ownersblog/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[1]', 'top');
add_rewrite_rule('ownersblog/([^/]+)/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[2]', 'top');

また、子タームをもつ親タームはあらかじめ選択させない様にしました。


【C】のSTEP03で書いたカテゴリー未選択記事の404対策も忘れずに入れます。

これで何とか実現できました! ページ送りのことも考えた全記述は以下のとおり。
【C】のSTEP01『Custom Post Type Permalinks』の設定をしたら、functions.phpに下記を記載すればOKです(^^)

functions.phpを修正した際は、管理画面の「パーマリンク設定」「変更を保存」クリックしてデータベースを更新する作業が必要ですのでお忘れなく。
/*	カスタム投稿のパーマリンク設定
-----------------------------------------------------*/
//パーマリンクからタクソノミー名を削除
function my_custom_post_type_permalinks_set($termlink, $term, $taxonomy){
   return str_replace('/'.$taxonomy.'/', '/', $termlink);
}
add_filter('term_link', 'my_custom_post_type_permalinks_set',11,3);

//カスタムタクソノミーアーカイブ用のリライトルールを追加 ページ送り時もリライト
//★それぞれownersblogはカスタム投稿タイプ名、ownersblog-catはカスタムタクソノミー名を挿入
//↓カスタム投稿タイプの一覧ページ
add_rewrite_rule('ownersblog/page/([0-9]+)/?$', 'index.php?post_type=ownersblog&paged=$matches[1]', 'top');

//↓親タームに属する記事ページ ★othersには子タームのないタームスラッグを挿入
add_rewrite_rule('ownersblog/others/([^/]+)/?$', 'index.php?ownersblog=$matches[1]', 'top');

//↓親ターム一覧ページ
add_rewrite_rule('ownersblog/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[1]', 'top');
add_rewrite_rule('ownersblog/([^/]+)/page/([0-9]+)/?$', 'index.php?ownersblog-cat=$matches[1]&paged=$matches[2]', 'top');

//↓子ターム一覧ページ
add_rewrite_rule('ownersblog/([^/]+)/([^/]+)/?$', 'index.php?ownersblog-cat=$matches[2]', 'top');
add_rewrite_rule('ownersblog/([^/]+)/([^/]+)/page/([0-9]+)/?$', 'index.php?ownersblog-cat=$matches[2]&paged=$matches[3]', 'top');
			
	
/*	タクソノミー未選択公開時にデフォルトで特定のタームを選択させる
-----------------------------------------------------*/
function add_defaultcategory_automatically($post_ID) {
    global $wpdb;
    //カスタムタクソノミーのタームを取得
    $curTerm = wp_get_object_terms($post_ID, 'ownersblog-cat');//★カスタムタクソノミー名
    //ターム指定数が未設定の時に特定のタームを指定
    if (0 == count($curTerm)) {
        $defaultTerm= array(1); //★選択させたいタームIDに変更する
        wp_set_object_terms($post_ID, $defaultTerm, 'ownersblog-cat');//★カスタムタクソノミー名
    }
}
//カスタム投稿
add_action('publish_ownersblog', 'add_defaultcategory_automatically');//★publish_カスタム投稿タイプ名

	
/*	親タームを選択できないようにする コピペでOK
-----------------------------------------------------*/
require_once(ABSPATH . '/wp-admin/includes/template.php');
class Nocheck_Category_Checklist extends Walker_Category_Checklist {

  function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
    extract($args);
    if ( empty( $taxonomy ) )
      $taxonomy = 'category';

    if ( $taxonomy == 'category' )
      $name = 'post_category';
    else
      $name = 'tax_input['.$taxonomy.']';

    $class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : '';
    $cat_child = get_term_children( $category->term_id, $taxonomy );

    if( !empty( $cat_child ) ) {
      $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), true, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
    } else {
      $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), false, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
    }
  }

}

function wp_category_terms_checklist_no_top( $args, $post_id = null ) {
  $args['checked_ontop'] = false;
  $args['walker'] = new Nocheck_Category_Checklist();
  return $args;
}
add_action( 'wp_terms_checklist_args', 'wp_category_terms_checklist_no_top' );

変更後のパーマリンク

これで、なんとかパーマリンクは目標の下記になりました!

カスタム投稿タイプ記事一覧ページ
http://サイトアドレス/カスタム投稿タイプ名/
http://libre-co.com/ownersblog/

タクソノミーページ
http://サイトアドレス/カスタム投稿タイプ名/子タームを持たない親ターム名/
http://サイトアドレス/カスタム投稿タイプ名/親ターム名/子ターム名/
http://libre-co.com/ownersblog/tabearuki/wasyoku/
http://libre-co.com/ownersblog/others/

記事詳細ページ
http://サイトアドレス/カスタム投稿タイプ名/親ターム名/子ターム名/投稿名/
http://libre-co.com/ownersblog/tabearuki/wasyoku/はじめてのつぶやき/

あとがき

だいぶ長くなりました!が、まとめられてスッキリしました!(^^)
カスタムタクソノミーのパーマリンクは厄介ですね。
個人的には、やるとしてもタイプBまでにしておきたい感じです(笑)