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

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

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

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

873閲覧

複数タームの合計で上位5件だけ表示したい

iambeginnerr

総合スコア12

WordPress

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/10/14 06:31

前提・実現したいこと

制作中のwordpressサイトで、タームごとの投稿数ランキングを表示しています。
公開済の投稿数が多い順に、ターム名と記事数を5件表示したいのですが、全てのタームにある特定のターム投稿数を加算した形で出力したいです。

◆ターム例
・全国(投稿数:10件)
・北海道(投稿数:5件)
・青森県(投稿数:2件)
・岩手県(投稿数:3件)
・宮城県(投稿数:7件)
・秋田県(投稿数:1件)

◆表示したい理想
一位:宮城県(17)※投稿数は「全国」の投稿数を各ターム投稿数に加算した数値
二位:北海道(15)
三位:岩手県(13)
四位:青森県(12)
五位:秋田県(11)

試したこと

投稿数の多いタームを5件出力してから、「全国」の投稿数を足し算するという方法で表示できないか試したのですが、うまくいきませんでした。
めちゃくちゃだと思いますが、下記コードを試しました。

該当のソースコード

<?php $args = array( 'taxonomy' => 'area_cat', 'parent' => '0', 'number' => '10', 'orderby' => 'count', 'order' => 'DESC', 'hide_empty' => '1', 'post_status' => 'publish', ); $terms = get_terms( $args ); ?> <?php $args = array( 'taxonomy' => 'area_cat', 'parent' => '0', 'post_status' => 'publish', 'terms' => 'allarea-c' ); $allarera = get_terms( $args ); ?> <?php $allarera_count=$allarera->count ?> <?php $term_count=$term->count ?> <?php $total = $allarera_count + $term_count ?> <ul> <?php foreach ( $terms as $term ) { echo '<li><a href="'.$term->slug.'"> '.$term->name.'<span>'.$term->count.'件</span></a></li>'; } ?> </ul>

このような形の考え方で良いのか、または全く違った出力方法があるのか...お尋ねしたいです。
皆様の知恵をお貸しください!
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

どこにも5件という条件が見当たらんが

$args = array( 'taxonomy' => 'area_cat', 'parent' => '0', 'post_status' => 'publish', 'terms' => 'allarea-c' ); $allarera = get_terms( $args );

これが全国を取得するという意味なら投稿数は
$allarera = get_terms( $args )[0]->count;
で取れるんじゃないの?

あとはループで

foreach ( $terms as $term ) { echo '<li><a href="'.$term->slug.'"> '.$term->name.'<span>'.$term->count + $allarera.'件</span></a></li>'; }

この辺は要らん

<?php $allarera_count=$allarera->count ?> <?php $term_count=$term->count ?> <?php $total = $allarera_count + $term_count ?>

投稿2021/10/14 08:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

iambeginnerr

2021/10/15 01:55

回答いただきありがとうございます! 参考に、コードを以下のように変更したところ、 <?php $args = array( 'taxonomy' => 'area_cat', 'parent' => '0', 'number' => '5', 'orderby' => 'count', 'order' => 'DESC', 'hide_empty' => '1', 'post_status' => 'publish', ); $terms = get_terms( $args ); ?> /*ここまでは変更なし */ <?php $args = array( 'taxonomy' => 'area_cat', 'parent' => '0', 'post_status' => 'publish', 'terms' => 'allarea-c' /* 「全国」のスラッグです */ ); $allarera = get_terms( $args )[0]->count; ?> <ul> <?php foreach ( $terms as $term ) { echo '<li><a href="'.$term->slug.'"> '.$term->name.'<span>'.$term->count + $allarera.'件</span></a></li>'; } ?> </ul> としたところ、「A non-numeric value encountered in〜」というエラーが出たため、調べつつ以下のように加算部分をカッコで括ってみました。 <ul> <?php foreach ( $terms as $term ) { echo '<li><a href="'.$term->slug.'"> '.$term->name.'<span>'.($term->count + $allarera).'件</span></a></li>'; } ?> </ul> そうしましたら、エラーは消えたのですが表示される数値が実際の投稿数と合っておらず(10件くらいプラスされていました)、今この時点で検証を進めているところです。 何か改善方法をご存知でしたらご教授願います!!
iambeginnerr

2021/10/15 02:28

解決いたしました! 教えていただいたコードを元に、以下のように少し変更をしてみたら思った通りの表示にできました。 ありがとうございました! <?php $arr = array( /*全国取得*/ 'posts_per_page' => -1, 'post_status' => 'publish', 'post_type' => 'shop', 'tax_query' => array( array( 'taxonomy' => 'area_cat', 'field' => 'slug', 'terms' => 'allarea-c' ), ) ); $res = get_posts( $arr ); $allposts = count($res);?> <ul> <?php foreach ( $terms as $term ) { echo '<li><a href="'.$term->slug.'"> '.$term->name.'<span>'.($term->count + $allposts).'件</span></a></li>'; } ?>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問