• 解決済 happyyk

    (@happyyk)


    記事の上部や下部に、カテゴリ等のメタ情報が表示されるテンプレートを使用しています。

    カテゴリは、子-親と、子が先頭、親が2番目に表示されるようになっているのですが、下記のカテゴリだけ、親-子になってしまいます。


    面白動画(スラッグ:video・ID:10)

    音楽(スラッグ:musicvideo・ID:192)

    上記以外のカテゴリを見直してみましたが、IDは親より大きかったり、小さかったり、まちまちなので、IDの番号などは関係がないと思います。

    使われているコードは、

    if ($postType === 'post' && $args['show_cat'] && !$dp_hide_cat) {
    		$cats = get_the_category();
    		if ($cats) {
    			$cats = $cats[0];
    			$cat_color_class = " cat-color".$cats->cat_ID;
    			$cats_code = '<a href="'.get_category_link($cats->cat_ID).'" rel="tag" class="'.$cat_color_class.'">' .$cats->cat_name.'</a>';
    		}
    		$cats_code = '<div class="meta-cat">' .$cats_code. '</div>';
    	}

    です。

    公式テーマのTwenty Fifteenが現在使用しているテーマ同様、記事下部に子-親と並ぶような表示になっていたため、テーマ独自の仕様ではないと思います。

    WordPress歴は2年ほど、WordPress独自のタグのが多少わかる程度で、phpに関する知識ほとんどありません。

    改善策などがありましたら、教えていただければと思います。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • 同じテーマを使っている人からコメントがつくかもしれないので、テーマの入手先を示されてはどうでしょうか。

    示して頂いたコードはカテゴリーをひとつだけ表示するものなので、それとは別に、二つ並ぶときの順序を決めている部分があると思います。

    トピック投稿者 happyyk

    (@happyyk)

    gblsm 様

    返信ありがとうございます。

    テーマの提示はできるのですが、Wordpress,orgに登録されているテーマではないため、こちらのフォーラムでは対象外かと思い、コードの表示と、似かよった表示になっているTwenty Fifteenを挙げさせていただきました。

    使用しているテーマは、WordPress.orgDigipress社の「MAGJAM」というテーマです。

    自分でもほかに定義している場所がないかもう少し探してみようと思いますが、こちらのフォーラムで質問するのが場違いなようでしたら、スレッドを閉めますので、その際は、ご指摘いただければと思います。

    Twenty Fifteen で構わないのでしたらスレッドを閉じる必要はないと思いますよ。

    Twenty Fifteen の場合、表示するカテゴリーの順番を何も指定していません。

    Twenty Fifteen は WordPress コアのテンプレートタグ get_the_category_list を使って、投稿のカテゴリーを HTML のリストとして取得します。さらに get_the_category_list は、テンプレートタグ get_the_category が返す複数のカテゴリーそのままの順序でリストにします。そのため表示順が、子-親、親-子、どちらになるかは決まりがありません。

    順序を固定するには、get_the_category に用意されているフィルター ‘get_the_categories’ を使う方法があります。フックした関数へカテゴリーオブジェクトの配列が渡されるので、好きな順序に並び替えた後の配列を返せばよいでしょう。

    子-親 の順にするのはどのようにすればよいかわかりませんが、例えばカテゴリースラッグの順なら次のようにしてできました。

    add_filter( 'get_the_categories', 'gblsm_sort_categories' );
    function gblsm_sort_categories( $cats ) {
    	usort( $cats, 'gblsm_sort_by_category_slug' );
    	return $cats;
    }
    function gblsm_sort_by_category_slug( $a, $b ) {
    	return strcmp( $a->slug, $b->slug );
    }

    トピック投稿者 happyyk

    (@happyyk)

    gblsm 様

    いろいろありがとうございます。
    自分でも調べていろいろやってみたのですが、

    上で教えていただいた、コードをfunctions.phpに書きこんだところ、順番が逆になっていたカテゴリを含め、すべてのカテゴリが、子→親になりました。(gblsm部分は任意のものに置き換えました。)

    大変助かりました。ありがとうございます。

    私の知識がないため、教えていただいた、get_the_categoriesというフィルターをつけ加え、カテゴリスラッグでソートしているようだというくらいしかわかりません。

    よろしければ、functions.phpで何を設定したのか、簡単な説明をしていただけませんか?

    今後の参考にしたいと思います。

    私の知識がないため、教えていただいた、get_the_categoriesというフィルターをつけ加え、カテゴリスラッグでソートしているようだというくらいしかわかりません。

    ご理解いただいたとおりのことをやっています。
    子が先、親が後になったのは、偶然だと思います。

    トピック投稿者 happyyk

    (@happyyk)

    gblsm 様

    そうですか。
    たまたまなのですね。

    モヤモヤは残りますが、たまたまでも実現はできたので、トピックを閉めます。

    いろいろ、ご教授くださり、ありがとうございました。

    happyykさん、gblsm_sort_by_category_slug 関数がカテゴリー 2 つの大小関係を決めるので、これを作り替えればモヤモヤがなくなると思います。
    PHPのusort関数の説明もご覧ください。
    http://php.net/manual/ja/function.usort.php

    トピック投稿者 happyyk

    (@happyyk)

    gblsm 様

    リンク先、拝見しました。ありがとうございます。

    挙げていただいたページの中では、
    「多次元配列を使用する usort() の例」
    を応用すれば、どうにかなるかも…と思ったのですが、これは、gblsm様が提示してくださったコードとでやっていることでしょうか?

    このあたりをどうにかすれば、実現できそうなのですが、そのどうにかするのが、私の知識ではすぐにどうこうできそうにないのですが、勉強がてら、引き続き考えてみようと思います。

    応用することになりますが、多次元配列というものは今の場合関係ないのでたぶん使わないと思います。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「シングルページのメタ部分のカテゴリーを子-親にしたい」には新たに返信することはできません。