サポート » 使い方全般 » 複数カテゴリーの場合、パーマリンクになるカテゴリーを任意で選べますでしょうか。

  • p0nyp0ny

    (@p0nyp0ny)


    こんにちは!

    今迷っている部分があるので、、ぜひ皆さんの知識を貸して頂ければなと思っています。

    カテゴリーを複数選択する場合、
    カテゴリーの優先順位でパーマリンクが決められると思います。

    でも、そのパーマリンクになるカテゴリを任意で決めたいと思いますが、
    どんな方法であればできるのでしょうか。

    宜しくお願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • LABE

    (@latobeam)

    任意に、とは具体的にはどのように決めたいのでしょうか。

    パーマリンクにカテゴリを含む場合、 get_permalink() のソースによると、 get_the_categories() で取得したカテゴリをタームIDの昇順に並び替え、最初のもの(つまり、タームIDが最も小さいもの)を使うようです。
    そして、そこにフィルターフックが用意されており、別のカテゴリに変更することは可能なようです。

    function change_post_link_category( $cat, $cats, $post ) {
        // 何か処理
        // $cat : 標準で使われるカテゴリ
        // $cats: その投稿が持つすべてのカテゴリ
        // $post: その投稿の投稿オブジェクト
    }
    add_filter( 'post_link_category', 'change_post_link_category', 10, 3 );
    トピック投稿者 p0nyp0ny

    (@p0nyp0ny)

    LABEさん

    おお(;;)ご返事ありがとうございます。

    具体的、例えば、登録されているカテゴリが以下だとします。
    カテゴリ名:FOOD ID:2
    カテゴリ名:FRUIT ID:3
    カテゴリ名:DESERT ID:4

    選択したカテゴリは、
    FOODとDESERTです。

    そうなるとパーマリンクが、ooo/food/test1 になりますね。
    でも、私はfoodではなく他のカテゴリのパーマリンクとして使えたいです。

    要は、複数のカテゴリを選択した場合には
    自分が選んだカテゴリをパーマリンクとして使えるようにしたいです。

    LABEさんが書いてくださった方法も一度やってみます!

    LABE

    (@latobeam)

    「自分の選んだカテゴリ」とはどのように選ぶのか、によってやり方は変わってきます。
    例えば、投稿のカスタムフィールドに、どのカテゴリをパーマリンクとして使うかを記入する方法が手っ取り早いでしょう。

    function change_post_link_category( $cat, $cats, $post ) {
        $cats_id = array();
        foreach ( $cats as $value ) {
            $cats_id[] = $value->term_id;
        }
        $category = false;
        $post_meta = get_post_meta( $post->ID, 'permalink_cat', true );
        if ( is_numeric( $post_meta ) )
            $category = get_term( absint( $post_meta ), 'category' );
        if ( ! $category )
            $category = get_term_by( 'slug', $post_meta, 'category' );
        if ( $category && in_array( $category->term_id, $cats_id ) )
            return $category;
        return $cat;
    }
    add_filter( 'post_link_category', 'change_post_link_category', 10, 3 );

    以上のコードを functions.php に追加し、投稿のカスタムフィールドに permalink_cat というキーでカテゴリのIDまたはスラッグを保存すると、そのカテゴリをパーマリンクに使うようになる、と思います。
    動作確認はしていないので、参考までに。
    もっとグラフィカルなUIで実現したい場合は、プラグインがいくつかあるようなのでそちらをお使いください。

    • この返信は7年前にLABEが編集しました。
    トピック投稿者 p0nyp0ny

    (@p0nyp0ny)

    LABEさん

    こんにちは!!
    ご返事ありがとうございます<m(_ _)m>

    LABEさんが添付してくださった内容を元にすると
    私が望んだ通り出来ました 涙
    有難うございます 涙涙涙涙涙涙涙
    本当に助かりました!

    忙しい中ここまでしてくださって本当にありがたい気持ちでいっぱいです!
    重ねてありがとうございます!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「複数カテゴリーの場合、パーマリンクになるカテゴリーを任意で選べますでしょうか。」には新たに返信することはできません。