web-dev-qa-db-ja.com

URL内のカテゴリの階層

私が現在取り組んでいるWebサイトの投稿には、それぞれに複数の階層カテゴリが適用されています。例えば:

Source
- Books
-- Moby Dick
-- Sherlock Holmes

パーマリンクは/%category%/%postname%/として設定されています。ただし、投稿のURLにすべてのサブカテゴリが含まれているわけではありません。問題の投稿はSourceのカテゴリではなく、Books + Moby Dickのカテゴリに限られていますが、すべてsite.com/source/books/*postname*です。

だれかがこの動作を調整する方法を見つけ出すのを手伝ってくれる?

ありがとうございました。

2
zkvvoob

Permastruct /%category%/%postname%/はURL の上から最初に割り当てられた子までのカテゴリとサブカテゴリ を含みます。したがって、URLをsite.com/source/books/moby-dick/*postname*にする場合は、投稿を "Moby Dick"にのみ割り当てる必要があります。 「Moby Dick」カテゴリにのみ投稿を割り当てても、デフォルトでは「source」および「books」カテゴリのアーカイブの下に投稿が表示されます。

2
cybmeta

あなたの投稿に複数のカテゴリが割り当てられていても、ここであなたは完全な解決策を持っています。

function permalink_full_categories( $cat, $cats, $post ) {

    $ordering = array();
    foreach( $cats as $index => $this_cat) {
        $ordering[$this_cat->parent] = $index;
    }

    $ordered = array();
    $i = 0;

    while( $ordering[$i] !== null ){
        array_Push( $ordered, $cats[$ordering[$i]] );
        $i = $cats[$ordering[$i]]->term_id;
    }

    return end($cats);
}

add_filter( 'post_link_category', 'permalink_full_categories', 20, 3 );

パーマリンクカテゴリをフィルタリングしてデフォルトの動作を変更し、階層の最後のカテゴリを返します。

結果として、Wordpressコアは完全な階層カテゴリのURLを書きます。

0