カスタム投稿タイプのパーマリンク構造とその分類法を変更するにはどうすればよいですか?


10

これは私が以前に持っていた質問の再投稿ですが、これを完全に解決できるように、今より詳細に行きたいです。

繰り返しになりますが、(通常の)投稿でパーマリンクを変更するのは、[設定]> [パーマリンク]に移動して、広く使用されているものなど、好きなものに変更するだけです%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. まず、custom_post_type名前付きプロジェクトtaxonomy project_categoryを作成しました。
  2. ページポートフォリオを作成し、すべてのpost_type = project投稿をリストするページテンプレートを与えました。ページのパーマリンクに.htmlを追加するにはどうすればよいですか?それは今にリンクhttp://mywordpress.com/portfolio私が欲しいながらhttp://mywordpress.com/portfolio.html。これは最初の問題を解決するはずです。
  3. すると、そこにはサブカテゴリがいくつあるかを事前に知ることができないため、状況は厳しくなります。したがって、私たちが求めている構造は次のとおりですportfolio/(CATEGORY PATH FROM TOP TO CHILD)/post.html。この時点ではまだ行き詰っています。どういうわけか、最後のカテゴリをパスに追加して、それをproject_categoryに沿って渡す必要があると思います。これにより、適切に処理できるtaxonomy.phpファイルが作成されます。
  4. 私もこれに取り組みませんでしたが%postname%.html、何かの終わりに何か関係があるはずです。

私の問題が明確で、この問題への取り組みを手助けしてくれる勇敢な開発者がいることを望んでいます。


1
あなたがそれを正しく実装していれば、前の質問で私が与えた解決策はそのように機能するはずです。唯一のことは、htmlの部分を取得できないことです
Manny Fleurmond

はい、しかしそれは特定のパスにロックされていたので、サブカテゴリまたはそれ以上はないかもしれないが、カテゴリ/サブカテゴリ/ページのみ。これはより動的です。
マーク

または、私はそれを適切に実装しませんでした;)
マーク

回答:


4

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

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;
}

リクエストフィルターは、カテゴリー(実際には用語)と投稿を要求するかどうかをフィルターするのに適した方法です。これにより、1つのリライトルールのみを追加して、投稿がカテゴリ、サブカテゴリに属しているかどうかに関係なく、投稿ページを取得できます。
ZalemCitizen

1

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:

(数百または数千の投稿を公開する場合は、この方法はお勧めしません

MAIN_CATEGORY次のパラメータを含む、CUSTOM POST(という名前)を登録します。

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

次に、次のようにカスタム投稿を公開します(つまり、という名前のいくつかのカスタム投稿を公​​開します。その後、別の投稿を公開しますが、親として選択します。
SUB_CAT_2, SUB_CAT_1..SUB_CAT_2





ps
1)初心者の場合は、「CUSTOM POSTの登録」 および「 TAXONOMYへのCUSTOM POSTの登録」を確認してください
。2)サブレベルの検索機能が必要な場合は、カスタム検索クエリを使用してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.