メシのタネ

めしのたねになるIT情報配信サイト


【WordPress】子カテゴリと記事タイトルを引っ付けて取得する方法

,

  1. WordPress
  2. 【WordPress】子カテゴリと記事タイトルを引っ付けて取得する方法

ahiru
[子カテゴリー] [子カテゴリーに含まれれる記事のタイトル]
っていうデータを作りたい場合があると思います。

例えば
[今池の水道工事][テルソックにおまかせください!!]
[新瑞橋の水道工事][ミフテックABCにおまかせください!!]

こんな感じで子カテゴリとタイトル表示したい場合ですね。
あんましWordPressに詳しくないのでやってみるとやっかいでした。

あれっ??て思ったとこ

どうせWP_Queryだろって思って、
いつも通り、Hissyさんのコレを見ました。
だけど、どーも子カテゴリ引っこ抜いてくるようなパラメータを見つけられず。
でも良く見たらそんな事なかったです。

とりあえずググった結果

2パターン見つけました。
多分もっとあるんだろうけど、
とりあえずこれでデキルだろうってやつ

1つ目

get_categoriesでカテゴリIDから子カテゴリを取得
子カテゴリ分回すついでにカテゴリの名前を取得
回ってる時にwp_queryでクエリを投げる
戻ってきたオブジェクトのpostsプロパティを回す
さっき取ったカテゴリの名前を出力、次にpost_titleを出力


function getmapdata($catid) {


   $categories = get_categories(array('parent'=>$catid));

     foreach($categories as $category)
     {
       $cat = $category->cat_name;
       $obj = new WP_Query(array('cat'=>$category->cat_ID,'posts_per_page'=>1));

      foreach($obj->posts as $array)
      {
        echo $cat.'&nbsp&nbsp'.$array->post_title.PHP_EOL;
      }

    }

    wp_reset_query();

}

こんな感じになるんだと思います。

2つ目

カテゴリー番号をget_termsに入れる
それをchild_ofのパラメータに使って子カテゴリ取得
回すカテゴリを取得するパラメータを生成
query_postsをループで回す
それで出力

コードはこちらの記事から見ていただくといいです。
現在のカテゴリの子カテゴリ一覧と各子カテゴリに属する記事の一覧を表示

1つ目について思うこと

記事数の制御がしづらいのが問題だなぁと思いました。
例えば出力する件数が決められている場合に、
5件出力の所、子カテゴリが2件とかあったら5件超えますし、
post_per_pageで制御するにしろ、子カテゴリの数が出力件数を超えている場合
プログラムで制御しないとダメになるので、めんどくさいなーってなります。

2つ目について思うこと

初めてコレを見たとき、ええやんこれでってなって、
ちょっと修正加えてはいおっけーってやろうと思ったんですけど、
query_postsはメインクエリの改変が行われるために、
ちょっと扱い辛いらしいのです。なので2を参考にして書きました。

書いてみたプログラム

query_posts使わずにWP_Queryでやればいいじゃんって。
でもWP_Queryに子カテゴリ捕まえてくるようなパラメータ無かったじゃん
ってなったんですけど、それは僕の勘違いでした。

子カテゴリってタクソノミー扱いになってるっぽいからです。(あんま自信ないけど
だってこうなってるんだもん。


    ["tax_query"]=>
    array(1) {
      [0]=>
      array(3) {
        ["field"]=>
        string(2) "ID"
        ["taxonomy"]=>
        string(8) "category"
        ["terms"]=>
        string(1) "2"
      }
    }

こう見るとタクソノミーの名前がカテゴリーの2番って見方ができるじゃありませんか!
なので、HissyさんとこのWP_Queryの表を見ながら、、、、


          $arg = array(
                'tax_query' => array(
                          array(
                              'field' => 'ID',
                              'taxonomy' => 'category',
                              'terms' => $term_id,
                              ),
                          ),
          );

こーんな感じでパラメータ定義するといんじゃないでしょっか!
つまりこんな感じでコード書くといんじゃないでしょうか!


function getSoncat($catid)
{

  $categories = get_terms('category',array(
    'orderby' => 'id',
    'order' => 'ASC',
    'parent' => $catid,
    'hide_empty' => 0,
   ));

  $catmerge = array();

  for($i=0; $i<count($categories); $i++)
  {
          $arg = array(
                'tax_query' => array(
                          array(
                              'field' => 'ID',
                              'taxonomy' => 'category',
                              'terms' => $categories[$i]->term_id,
                              ),
                          ),
          );

          $q = new WP_Query($arg);

          for($j=0; $j<count($q); $j++)
          {
            if(!empty($q->posts[$j]->post_title))
            {
             $catmerge[] = array(
                            "termid" => $categories[$i]->term_id,
                            "name" => $categories[$i]->name,
                            "title" => $q->posts[$j]->post_title,
             );
            }
          }
  }

  return $catmerge;

}


なんかいつも通りグダグダですけど、
誰かがコレやる時困らなければ良いなと思います。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

若い頃、「仕事中にハマったこと」や「誰かに共有したい技術的な気づき」をアウトプットしたくてブログを始めましたが、勢い任せでよく分からない記事を大量生産し、あえなく飽きて終了。

改めて今、キャリア15年分の経験や知識が、これからITエンジニアを目指す方や、同じような課題で悩んでいる現役エンジニアの「メシのタネ」になるような記事を残したいと思っています。
※過去の記事は見ると精神が崩壊するため、そっとしておいてください。

🛠 経歴という名の珍道中:
文系Fラン → 広告営業 → Web営業 → 通信営業 → Web進行 → 出版 → Web媒体運用 → ソフトウェアハウス → SES → フリーランス

専門教育も受けず、転職歴も多数。履歴書はまるで時系列の事故記録のようですが、試行錯誤を重ね、なんとかエンジニアとして食べています。

このブログでは、そんな「履歴書クラッシャー型エンジニア」が送る、
名古屋一敷居の低い、実務に役立つ技術ブログを目指します。

PHP
魔王と行く! / Interface / Polymorphism / Ontology 深淵ガイドNew!!
Laravel
Laravel 12、「コード 1 行も書き換えず未来へ」──静かな革命の手順書New!!
Laravel
LaravelのMiddlewareって意味あるの?仕組み・使いどころ・やらかしまで整理してみたNew!!
Laravel
ServiceProviderって何してるの?DIの背後で動いてるやつの正体New!!
Laravel
LaravelのサービスコンテナとDI、「書いてるだけで動く」コードの正体
Laravel
Laravelのアーキテクチャ、実は誰もわかってない説