任意に、とは具体的にはどのように決めたいのでしょうか。
パーマリンクにカテゴリを含む場合、 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 );
LABEさん
おお(;;)ご返事ありがとうございます。
具体的、例えば、登録されているカテゴリが以下だとします。
カテゴリ名:FOOD ID:2
カテゴリ名:FRUIT ID:3
カテゴリ名:DESERT ID:4
選択したカテゴリは、
FOODとDESERTです。
そうなるとパーマリンクが、ooo/food/test1 になりますね。
でも、私はfoodではなく他のカテゴリのパーマリンクとして使えたいです。
要は、複数のカテゴリを選択した場合には
自分が選んだカテゴリをパーマリンクとして使えるようにしたいです。
LABEさんが書いてくださった方法も一度やってみます!
「自分の選んだカテゴリ」とはどのように選ぶのか、によってやり方は変わってきます。
例えば、投稿のカスタムフィールドに、どのカテゴリをパーマリンクとして使うかを記入する方法が手っ取り早いでしょう。
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年、 9ヶ月前にLABEが編集しました。
LABEさん
こんにちは!!
ご返事ありがとうございます<m(_ _)m>
LABEさんが添付してくださった内容を元にすると
私が望んだ通り出来ました 涙
有難うございます 涙涙涙涙涙涙涙
本当に助かりました!
忙しい中ここまでしてくださって本当にありがたい気持ちでいっぱいです!
重ねてありがとうございます!