質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

950閲覧

wordpressのget_categoriesを利用した、カテゴリ一覧ページの作成について:50音順に一覧表示したい。

dorayaki6

総合スコア11

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/05/11 14:24

前提・実現したいこと

wordpressの固定ページにカテゴリの一覧をリンク付きで表示しています。
その際にカテゴリ一覧を50音順で並べたいと思います。

ACFを利用してカテゴリによみがなのカスタムフィールドを用を取得してから
カスタムフィールドを利用して並べ替えたいのですが、調べましたが解決出来ませんでした。

実現したい例

あ行
アルフォート(リンク付き)

か行
かすてら
ケーキ

以上のようなカテゴリ一覧ページを作成したいので、お力添えをお願いいたします。

■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

該当のソースコード

php

試したこと

get_categories()で取得後、
usort()などを使って、配列の並べ替えを検証したが、文字列の昇順にして配列に戻すことが
うまくいかなかった。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

最近WP触ってない&手癖で書いてみたので間違ってるかもしれませんが、こんな感じではだめですかね・・?

php

1$categories = get_categories($arr); 2$arr = []; 3foreach ($categories as $key => $category) { 4 $arr[$key]['term_id'] = $category->term_id; 5 $arr[$key]['cat_name'] = $category->cat_name; 6 $arr[$key]['yomigana'] = get_field('yomigana', 'category_'.$category->term_id); 7} 8 9foreach ((array) $arr as $key => $value) { 10 // ソート項目 11 $sort[$key] = $value['yomigana']; 12} 13 14// ソート実行 15array_multisort($sort, SORT_ASC, $arr); 16?> 17 18 19<?php foreach($arr as $category) : ?> 20<div><?php echo $category['cat_name']; ?></div> 21<?php endforeach; ?>

処理かえてみました
こんな感じですかね

参考:PHPの多次元連想配列のソート - Qiita

投稿2019/05/11 15:36

編集2019/05/11 16:25
sola-msr

総合スコア876

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dorayaki6

2019/05/11 15:58

配列にyomiganaがソートされました! ただ、これを元に、$categoriesの中身の順番をソートする方法が良くわかりません。すいません。
dorayaki6

2019/05/11 15:59

foreach($categories as $category) : <div><?php echo $category->cat_name; ?></div> <?php endforeach; ?> 上記のように、ソートした順に名前を一覧表示したいのです。
dorayaki6

2019/05/11 17:16

ありがとうございます。想定どおりのソートができました。夜分遅くに感謝いたします。 本当にありがとうございました。
guest

0

引数を以下のようにしたら行けそうな気がしますがどうでしょう?

php

1$args = array( 2 'orderby' => 'name', // カテゴリー名 3 'order' => 'ASC', // 昇順 4); 5$categories = get_categories( $args );

詳細:関数リファレンス/get categories - WordPress Codex 日本語版

投稿2019/05/11 14:43

sola-msr

総合スコア876

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dorayaki6

2019/05/11 14:49

申し訳ありません。説明が不足しておりました。 カテゴリー名は、漢字が含まれているため、カスタムフィールドでよみがなを付けています。 よって、カスタムフィールドでASCを実行したいのです。
sola-msr

2019/05/11 15:01

んーなんとなくですが、まずすべてのカテゴリー情報を取得して、そのカテゴリーに結びついてるカスタムフィールドのよみがなの値をfor分か何かで配列に入れ、その配列をソートするとかですかね
dorayaki6

2019/05/11 15:26 編集

$categories = get_categories($arr); usort($categories, function ($a, $b) { return get_field('yomigana', 'category_'.$a->term_id) - get_field(yomigana', 'category_'.$b->term_id); }); 以上のようなコードで並べ替えできないかなと試しているのですが、うまくいきませんね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問