サポート » 使い方全般 » get_category_parentsで取得したカテゴリ名の表示順変更方法

  • 解決済 gblinngy

    (@gblinngy)


    わからないことにぶち当たってしまい、悩んでおります。
    どうかお知恵を貸してください。
    (当方、プログラムは素人です。。。)

    titleタグ(header.php)に、カテゴリを下記のような順序で出力したいです。
    ———-
    ▼記事ページ
    {記事タイトル名}|{孫カテゴリ名}|{子カテゴリ名}|{親カテゴリ名}|{サイト名}

    ▼アーカイブページ(孫カテゴリアーカイブページの場合)
    {孫カテゴリ名}|{子カテゴリ名}|{親カテゴリ名}|{サイト名}
    ———-

    現状、{親カテゴリ}|{子カテゴリ}|{孫カテゴリ} の順に出すまでは
    なんとかたどり着いたのですが、カテゴリ順を変更するにはどうしたらよいでしょうか?

    <title>
    <?php if ( is_category(1) || cat_is_ancestor_of(1, $cat)) { ?>
    	<?php echo get_category_parents( $cat, false, '|' ); ?><?php bloginfo('name'); ?>
    <?php } elseif (is_singular('post')) { ?>
    	<?php echo the_title(); ?>|
    	<?php
    		$cat = get_the_category();
    		$cat_id = $cat[0]->term_id;
    		echo get_category_parents( $cat_id,false,'|' );
    	?>
    	<?php bloginfo('name'); ?>
    <?php } else { ?>
    	<?php echo the_title(); ?> | <?php bloginfo('name'); ?>
    <?php } ?>
    </title>

    どうぞお力を貸してください。
    よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • とりあえずthe_titleにechoは必要ないと思いますが……ともあれ、
    get_categoriesで可能だと思いますがどうでしょうか。
    (バックアップしてからお願いします)

    <?php
    $cat = get_the_category();
    $cat_id = $cat[0]->term_id;
    $args = array(
     'orderby' => 'name',
      'order' => 'DESC',
    'child_of' => $cat_id
    );
    $categories = get_categories($args);
    foreach ($categories as $category) { ?>
    <a href="<?php echo get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?></a>|
    <?php } ?>

    >Kazaisyuさま

    返信ありがとうございます!
    教えていただいたコードを入れてみたのですが、何も出力されませんでした。。。
    難しいのですかね…。
    (the_titleの件、ありがとうござます!echoは不要でしたね)

    すみません、少しコードが間違えてました。

    <?php
    $cat = get_the_category();
    $cat_id = $cat[0]->term_id;
    $args = array(
     'orderby' => 'term_group',
      'order' => 'DESC',
    'child_of' => $cat_id
    );
    $categories = get_categories($args);
    foreach ($categories as $category) { ?>
    <a href="<?php echo get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?></a>|
    <?php } ?>

    あと「何も」というのは画面が真っ白という意味ですか?
    このコードはtitleの中、ifの該当部分に入れてもらえないと機能しないと思います。
    あとは、<?php ?>が入れ子になっていないか、あるいはphpコードエラーがないかをチェックしてみてください。(googleで「php コードチェック」と検索すると良いです)
    あとは、どこのifが動いていないのか(あるいは全部か)、正確に教えてもらえるともう少し詳しく対応できるかと思います。

    >Kazaisyuさま

    ありがとうございます。
    画面は変わらず、単に何も出力されない状況です。
    入れる場所が違うのでしょうか…

    ▼詳細ページの、カテゴリの部分に教えていただいたコードを入れました

    <title>
    <?php if ( is_category(1) || cat_is_ancestor_of(1, $cat)) { ?>
    <?php echo get_category_parents( $cat, false, '|' ); ?><?php bloginfo('name'); ?>
    <?php } elseif (is_singular('post')) { ?>
    <?php the_title(); ?>|
    <?php
    $cat = get_the_category();
    $cat_id = $cat[0]->term_id;
    $args = array(
     'orderby' => 'term_group',
      'order' => 'DESC',
    'child_of' => $cat_id
    );
    $categories = get_categories($args);
    foreach ($categories as $category) { ?>
    <a href="<?php echo get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?></a>|
    <?php } ?>
    <?php bloginfo('name'); ?>
    <?php } else { ?>
    	<?php the_title(); ?> | <?php bloginfo('name'); ?>
    <?php } ?>
    </title>

    ↓下記のようになります。
    —————
    カテゴリ:<title>{親カテゴリ}|{子カテゴリ}|{孫カテゴリ}|{サイト名}</title>
    詳細ページ:<title>{記事タイトル名}|{サイト名}</title>
    その他:<title>{記事タイトル名}|{サイト名}</title>
    —————
    カテゴリの部分がまるっと出力されていない状況です。
    一応、条件分岐としては正しく動いているのかなと思います。

    ▼カテゴリの方へも入れてみました。

    <title>
    <?php if ( is_category(1) || cat_is_ancestor_of(1, $cat)) { ?>
    <?php
    $cat = get_the_category();
    $cat_id = $cat[0]->term_id;
    $args = array(
     'orderby' => 'term_group',
      'order' => 'DESC',
    'child_of' => $cat_id
    );
    $categories = get_categories($args);
    foreach ($categories as $category) { ?>
    <a href="<?php echo get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?></a>|
    <?php } ?>
    <?php bloginfo('name'); ?>
    <?php } elseif (is_singular('post')) { ?>
    <?php the_title(); ?>|<?php $cat = get_the_category(); $cat_id = $cat[0]->term_id; echo get_category_parents( $cat_id,false,'|' );?><?php bloginfo('name'); ?>
    <?php } else { ?>
    	<?php the_title(); ?> | <?php bloginfo('name'); ?>
    <?php } ?>
    </title>


    ↓下記のようになります。
    —————
    カテゴリ:<title>{サイト名}</title>
    詳細ページ:<title>{記事タイトル名}|{親カテゴリ}|{子カテゴリ}|{孫カテゴリ}|{サイト名}</title>
    その他:<title>{記事タイトル名}|{サイト名}</title>
    —————

    全然検討違いのところに入れていたらすみません><

    すみません、titleでしたね。ではaタグは必要なさそうです。
    テストしてみましたが、一記事にカテゴリーが複数ついている場合は動かないかもしれません。

    <?php
    $cat = get_the_category();
    $cat_id = $cat->term_id;
    $args = array(
    'child_of' => $cat_id
    );
    $categories = array_reverse(get_categories($args));
    foreach ($categories as $category) { ?>
    <?php echo $category->name; ?>|
    <?php } ?>

    >kazaisyuさま

    ありがとうございます!!!!!
    できました!!!
    出来ないのかもと半分あきらめていたので、本当に本当に助かりました!

    <title>
    <?php if ( is_category(1) || cat_is_ancestor_of(1, $cat)) { ?>
    <?php
    $cat = get_the_category();
    $cat_id = $cat->term_id;
    $args = array(
    'orderby' => 'term_group',
    'order' => 'DESC',
    'child_of' => $cat_id
    );
    $categories = array_reverse(get_categories($args));
    foreach ($categories as $category) { ?>
    <?php echo $category->name; ?>|<?php } ?><?php bloginfo('name'); ?>
    <?php } elseif (is_singular('post')) { ?>
    <?php the_title(); ?>|<?php
    $cat = get_the_category();
    $cat_id = $cat->term_id;
    $args = array(
    'orderby' => 'term_group',
    'order' => 'DESC',
    'child_of' => $cat_id
    );
    $categories = array_reverse(get_categories($args));
    foreach ($categories as $category) { ?>
    <?php echo $category->name; ?>|<?php } ?>
    <?php bloginfo('name'); ?>
    <?php } else { ?>
    	<?php the_title(); ?> | <?php bloginfo('name'); ?>
    <?php } ?>
    </title>

    ※orderbyとorderが入っていなかったので、前回書いていただいたコードから追記しましたら、見事に出力されました!

    この度は本当にありがとうございました!!!
    おかげさまで解決いたしましたので、後ほどCloseさせていただきます!

    解決いたしましたので、Closeさせたいただきます!

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「get_category_parentsで取得したカテゴリ名の表示順変更方法」には新たに返信することはできません。