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

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

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

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

Q&A

解決済

2回答

4155閲覧

WordPress カスタムタクソノミーで絞り込んだカスタム投稿タイプの件数を取得する方法

Shinroh

総合スコア61

WordPress

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

1グッド

1クリップ

投稿2016/10/19 08:51

表題の通りです。

以下のような場合に、物件情報のうち、tokyo のタクソノミーがついているものの件数を取得する方法を教えてください。

・物件情報(カスタム投稿タイプ)
・area(カスタムタクソノミー)
・tokyo(ターム)
・osaka(ターム)
・nagoya(ターム)

初歩的な質問で申し訳ありませんが、よろしくお願いします。

kanineko👍を押しています

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

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

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

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

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

kei344

2016/10/19 09:19

どこでどう絞り込んだか、そのコードを提示されたほうが回答を得やすいと思います。
guest

回答2

0

まず、最終的な目標は”特定の投稿タイプの特定のタームに属する投稿の総数を取得する”こととします。

こんな関数を作ってみました。

php

1function count_term_post($post_type, $tax, $slug, $echo = true){ 2 $args = array( 3 'posts_per_page' => -1, 4 'post_type' => $post_type, 5 'tax_query' => array( 6 array( 7 'taxonomy' => $tax, 8 'field' => 'slug', 9 'terms' => $slug 10 ) 11 ) 12 ); 13 $result = get_posts($args); 14 $num = count($result); 15 if($echo){ 16 echo $num; 17 }else{ 18 return $num; 19 } 20} 21 22// 呼び出すときは下記のように実行 23count_term_post('投稿タイプ','タクソノミー名','タームのスラッグ');

処理の流れとしては、まず普通の投稿を取得するのと同じく投稿タイプ、タクソノミー、スラッグで絞り込んだ投稿をget_postsで取得します。

get_postsは絞り込み結果を配列で返すので、posts_par_pageの値を-1にして投稿を全て取得するようにし、get_postsが取得した配列の要素の数をcountで取得し返す流れになります。

第4引数に渡す値を指定しない場合は表示され、falseなどにすればデータとして返ってくるようになるのでそこはお好みでお使い下さい。

ぱぱっと書いたコードなのでこのコードで起きた不具合のいかなる責任も負いかねますのであくまで参考程度に…

投稿2016/10/19 09:36

編集2016/10/19 09:41
saito.ruka

総合スコア138

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

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

退会済みユーザー

退会済みユーザー

2016/10/20 06:27 編集

ループがリセットされていないです。件数を取得したいだけなら、わざわざ全ての投稿に関するデータ(タイトルや本文etc)を取得する必要がないと思います。
Shinroh

2016/10/20 08:43

お世話になります、別件の作業が長引いて今ようやく見れました。 やりたいことはSaitoさんのおっしゃる通りであっています。 Kuck1uさんもご指摘ありがとうございます。ループはリセットするようにしますね。 データも絞り込んで取得するようにしてみます。 一旦この内容でやってみます。わからなければまた投稿させていただきます。
saito.ruka

2016/10/20 08:50

kuck1uさん おっしゃる通り無駄ですね…もう少し考えるべきでした。 get_postについてはsetup_postdataを使用した場合リセット必要かとは思いますが、他の場合でリセットする必要ないと思っていたのですが…
guest

0

ベストアンサー

WP_Query に全件数が入っているので、それを利用すればよいと思います。カスタムタクソノミーページで WP_Query の情報が見たければ $wp_query に入っていると思います。

【[WordPress] WP_Queryで投稿取得後に全件数を求める | きほんのき】
http://kihon-no-ki.com/wordpress-wp-query-found-posts-property

【WordPress:グローバル変数を全て見る「$wp_query」 | hacknote】
http://hacknote.jp/archives/5176/

投稿2016/10/19 15:23

kei344

総合スコア69357

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

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

Shinroh

2016/10/20 08:44

Kei344さんいつもありがとうございます。 参考URL参考にさせていただきます。ありがとうございます! 解決しましたら、どのように解決したかを共有させていただきますm(__)m
Shinroh

2016/10/20 10:37

取り急ぎ解決した方法をご報告させていただきます。 以下の関数で取得できました。 function getMyPostCount($post_type, $taxonomy, $terms) { $args = array( 'post_type' => $post_type, 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'field' => 'slug', 'terms' => $terms ), ), ); $query = new WP_Query( $args ); return $query->found_posts; } 皆さまご協力ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問