メシのタネ

Webプログラミング 備忘録

  • AWS移行でコケ中

    現在このWebサイトが稼働している、このサーバーのMySQLをマスターとし、AWS上のRDSをスレーブとして、データ移行をしようと思ったが、バイナリロギングの取得が上手くいかない。多分の手順VPSのDBでスレーブ用のユーザ作成バイナリロギングを行うスレーブ側RDSにマスターのDUM[...]

    続きを読む
  • AWS ソリューションアーキテクト アソシエイトに合格しました。

    実は、今日までIT無資格でした。ええ歳だし、そろそろなんか資格取っておくかーと考えだしたので、取って嬉しい資格を取ろうと思ってたところ、AWSの資格あったなーと思って、調べてみたら、みんな14日で受かる!とか言ってるので、じゃあというこで、試験日14日後とかにして、試験の予約入れたのが地獄の始まり[...]

    続きを読む
  • DOMをPHPで操作できたらいいよね

    そうだよね。そう思うよね。JavaScriptでやると、画面がガタついたりするもんね。そうならないようにする方法もあるかもしれないけど、僕はできませんので、サーバー側でなんとかできたらええなぁと思って挑戦したけど、できませんでしたよ。PHP標準でHTMLをDOMにできるらしい今、技[...]

    続きを読む
  • 設計書ってなんで書くの?

    設計書をなぜ書くのかから始めてかれこれ3年近くこの禅問答をやっているわけですが、いまだに答えは出ません。ただ、その禅問答をやる中で設計書に対する取り組み方は大きく変わったので、その一部でも書いていきたい。基本設計はとにもかくにも必要だと思う設計書はいらぬ!という話をよく聞くし、自分[...]

    続きを読む
  • 書ききってやる。

    久々に書いてみる。久々に文章を書くということをやってみようと思う。伝える作業を観察したいと思ったからそうしたいと考えた。情緒的な文章は基本的にゴミ箱にぽいしてきましたが、情緒的なのも自分だと思う。「文章をかくという作業は、とりもなおさず自分と自分をとりまく事物との距離を確認すること[...]

    続きを読む

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

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

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

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

あれっ??て思ったとこ

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

とりあえずググった結果

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

1つ目

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

</p>
<p>function getmapdata($catid) {</p>
<p>   $categories = get_categories(array('parent'=&gt;$catid));</p>
<p>     foreach($categories as $category)<br />
     {<br />
       $cat = $category-&gt;cat_name;<br />
       $obj = new WP_Query(array('cat'=&gt;$category-&gt;cat_ID,'posts_per_page'=&gt;1));</p>
<p>      foreach($obj-&gt;posts as $array)<br />
      {<br />
        echo $cat.'&amp;nbsp&amp;nbsp'.$array-&gt;post_title.PHP_EOL;<br />
      }</p>
<p>    }</p>
<p>    wp_reset_query();</p>
<p>}</p>
<p>

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

2つ目

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

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

1つ目について思うこと

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

2つ目について思うこと

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

書いてみたプログラム

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

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

</p>
<p>    [&quot;tax_query&quot;]=&gt;<br />
    array(1) {<br />
      [0]=&gt;<br />
      array(3) {<br />
        [&quot;field&quot;]=&gt;<br />
        string(2) &quot;ID&quot;<br />
        [&quot;taxonomy&quot;]=&gt;<br />
        string(8) &quot;category&quot;<br />
        [&quot;terms&quot;]=&gt;<br />
        string(1) &quot;2&quot;<br />
      }<br />
    }</p>
<p>

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

</p>
<p>          $arg = array(<br />
                'tax_query' =&gt; array(<br />
                          array(<br />
                              'field' =&gt; 'ID',<br />
                              'taxonomy' =&gt; 'category',<br />
                              'terms' =&gt; $term_id,<br />
                              ),<br />
                          ),<br />
          );</p>
<p>

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

</p>
<p>function getSoncat($catid)<br />
{</p>
<p>  $categories = get_terms('category',array(<br />
    'orderby' =&gt; 'id',<br />
    'order' =&gt; 'ASC',<br />
    'parent' =&gt; $catid,<br />
    'hide_empty' =&gt; 0,<br />
   ));</p>
<p>  $catmerge = array();</p>
<p>  for($i=0; $i&lt;count($categories); $i++)<br />
  {<br />
          $arg = array(<br />
                'tax_query' =&gt; array(<br />
                          array(<br />
                              'field' =&gt; 'ID',<br />
                              'taxonomy' =&gt; 'category',<br />
                              'terms' =&gt; $categories[$i]-&gt;term_id,<br />
                              ),<br />
                          ),<br />
          );</p>
<p>          $q = new WP_Query($arg);</p>
<p>          for($j=0; $j&lt;count($q); $j++)<br />
          {<br />
            if(!empty($q-&gt;posts[$j]-&gt;post_title))<br />
            {<br />
             $catmerge[] = array(<br />
                            &quot;termid&quot; =&gt; $categories[$i]-&gt;term_id,<br />
                            &quot;name&quot; =&gt; $categories[$i]-&gt;name,<br />
                            &quot;title&quot; =&gt; $q-&gt;posts[$j]-&gt;post_title,<br />
             );<br />
            }<br />
          }<br />
  }</p>
<p>  return $catmerge;</p>
<p>}</p>
<p>

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

関連記事

コメントをお待ちしております