web-dev-qa-db-ja.com

カスタム投稿タイプのパーマリンク構造を変更する方法と分類法

これは以前に行った質問の再投稿ですが、これを完全に解決できるようにするために、ここでさらに詳しく説明します。

繰り返しますが、(通常の)投稿ではパーマリンクを変更するのは設定>パーマリンクへ行くのと同じくらい簡単で、広く使われている%category%/%postname%.htmlのようなあなたが好きなものにそれを変更することによってです。これはすべてうまくいきます。これがカスタム投稿タイプにとっても簡単で、分類法でもあるならば。

だからこれが私が達成したいものです。

  1. http://mywordpress.com/portfolio.html - すべてのカテゴリのすべての投稿を表示します。
  2. http://mywordpress.com/portfolio/music/ - このカテゴリのすべての投稿を表示します。
  3. http://mywordpress.com/portfolio/music/trance/ - この(子)カテゴリのすべての投稿を表示します。
  4. http://mywordpress.com/portfolio/music/trance/Tiesto.html - 投稿を表示します。

私がこれまでに得たものは以下の通りです:

  1. 最初に project というcustom_post_typetaxonomy project_category を作成しました。
  2. 私はページPortfolioを作成し、それにすべてのpost_type = project投稿をリストするページテンプレートを与えました。パーマリンクのページに.htmlを追加するにはどうすればいいですか? http://mywordpress.com/portfolio.html が必要ですが、 http://mywordpress.com/portfolio にリンクしています。これで最初の問題は解決するはずです。
  3. それで、私たちはそこにいくつのサブカテゴリがあるかを前もって知らないので、たぶん困難になるでしょう。だから私たちが持っている構造はportfolio/(CATEGORY PATH FROM TOP TO CHILD)/post.htmlです。私はまだこの時点で立ち往生しています。どういうわけか最後のカテゴリをパスに追加して project_category に沿って渡すと、taxonomy.phpファイルが正しく処理されるはずです。
  4. 私はこれにも取り組んでいませんが、何かの終わりに%postname%.htmlと関係があるはずです。

私の問題がはっきりしていること、そして私がこの問題に取り組むのを助ける勇敢な開発者がいることを願っています。

9
Mark

わかりました私は解決策があると思います。これがこれを達成するための正しい方法であるかどうか私にはわかりませんが、今のところそれがうまくいくように思われる唯一のものです。

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');

function mmp_rewrite_rules($rules) {
    $newRules                               = array();
    $newRules['portfolio/(.+)/(.+?).html$'] = 'index.php?project=$matches[2]';
    $newRules['portfolio/(.+)/?$']          = 'index.php?project_category=$matches[1]'; 

    return array_merge($newRules, $rules);
}


add_filter('request', 'mmp_rewrite_request');

function mmp_rewrite_request($vars) {
    if (isset($vars['project_category'])) {
        if (strpos($vars['project_category'], '/') !== false) {
            $categories = explode('/', $vars['project_category']);
            $vars['project_category'] = $categories[count($categories) - 1];
        }
    }

    return $vars;
}
4
Mark

何時間も頭を叩いた後、このプラグインはとても役に立ちました。

https://wordpress.org/plugins/custom-post-type-permalinks/ /

以下はオプションのスクリーンショットです。

enter image description here 

1
Mohd. Umar

2つの方法

*この記事の下部にあるメモを参照してください。


たとえば、次のようなパーマリンク構造が必要です。
/MAIN_CATEGORY/SUB_CAT_2/Another_SUBCAT/my-post

最初の では、パーマリンクを /%category%/%postname% に設定する必要があるかもしれません。それで….




方法1:

sTANDARDカテゴリ(MAIN_CATEGORYSUB_CAT_1and etc..)を作成し、このパラメータを含むCUSTOM POSTを登録します。

'taxonomies'    => array('category'..)

そして、次のコードを使ってパーマリンクを変更してください: https://wordpress.stackexchange.com/a/195643/33667
次に、CUSTOM POST(カテゴリの下に添付されている場合)を公開すると、URLは次のようになります。
example.com/MAIN_CATEGORY/SUB_CAT_1/my-post



方法2:

(このメソッドは 推奨されません あなたが数百または数千の投稿を公開する予定がある場合)

以下のパラメータを含めて、CUSTOM POST(名前付きMAIN_CATEGORY)を登録します。

    "supports"      => array('page-attributes'......
    "hierarchical"  => true,

その後、このようなカスタム投稿を公開してください:  
(つまり、いくつかのカスタム posts SUB_CAT_2, SUB_CAT_1..という名前で公開します。その後、別の投稿を公開する場合は、親としてSUB_CAT_2を選択します。





p.s.
1)初心者の場合は、 CUSTOM POST および TAXONOMYへのCUSTOM POSTの登録
2)サブレベルの検索機能が必要な場合は、 カスタム検索クエリを使用します

0
T.Todua