🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

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

Q&A

解決済

1回答

832閲覧

カスタムフィールのデータで作る表を10件毎に作成したい

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

0グッド

0クリップ

投稿2019/11/15 00:28

編集2019/11/18 08:45

現状

ページID(2176)の投稿に、カスタムフィールドを使って下記のコードにあるようなショートコードを自作しました。

function overtime_list() { $pid = 2176; $gt_value = '<table styel="height:80%;"> <thead> <tr> <th style="background:#cce;">所属</th> <th style="background:#cce;">氏名</th> <th style="background:#cce;">超勤時間</th> <th style="background:#cce;">超勤回数</th> </tr> </thead> <tbody>'; $c = 1; if ( have_rows( 'over_report_list' ,$pid ) ) : while ( have_rows( 'over_report_list' ,$pid ) ) : the_row(); if($c%2==0) { $tr_color = '#ddf'; $c++; } else { $tr_color = '#eef'; $c++; } $gt_value .= '<tr style="background:' . $tr_color . '; padding:2em; text-align:center;">'; $gt_value .= '<td>' . get_sub_field( 'over_report_belong' ,$pid ) . '</td>'; $gt_value .= '<td>' . get_sub_field( 'over_report_name' ,$pid ) . '</td>'; $gt_value .= '<td>今月' . get_sub_field( 'over_report_hour' ,$pid ) . 'h</td>'; $gt_value .= '<td>年' . get_sub_field( 'over_report_freq' ,$pid ) . '回</td>'; $gt_value .= '</tr>'; endwhile; endif; $gt_value .= '</table>'; return $gt_value; } add_shortcode('overtimeList','overtime_list');

やりたいこと

上記のコードでは、全データを出力してしまいます。
そのため、無駄にデータの余白をとっているのに「スクロール」が出てしまうほどのテーブルになってしまいます。

この表をモニタに「全画面表示」させたいのですが、スクロールが入ってしまうと、固定設置型掲示板のため、マウスなどでスクロールして表示することができません。

そのため、テーブルを『10件までの表を3つくらいに分けて並べて表示』できればと思っています。
3つ分のテーブルを”1つのショートコードにまとめる方法”でもよいのですが、できることなら”ショートコードを3つに分ける”ことができないかというのが最終的な希望です。

補足説明

ページ分割をしたいのではなく、ショートコードで抽出されるデータを元に、10件(行)ごとに「テーブル[01]」と「テーブル[02]」のように分け、それぞれをショートコード[01]、ショートコード[02]、ショートコード[03] ・・・ のように増やしていきたいのです。

※レコード件数は最大でも50件程度なのですが、テーブルの配置がショートコードごとに自由に配置できるようにしたいので、ショートコード[n個]としています。

基本データ

  • サーバー:Windows10pro + xampp
  • wordpress 5.3
  • PHP 7.3.6
  • 10.3.15-MariaDB

お願い

私自身がプログラミングのスキルに乏しく、ここまでが限界でした。
参考文献などもWEB等から検索してみたりもしましたが、見つけることすらできませんでした。
完成形までを教えてほしいとは申しませんが、プログラミングをほとんどわからないとおもってご指導いただければ幸いと存じます。よろしくお願いいたします。

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

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

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

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

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

CHERRY

2019/11/16 10:45

ショートコードで出力しているテーブルを複数に分けて、WordPress の `<!--nextpage-->` を使ってページ分割したいということでしょうか?
guest

回答1

0

ベストアンサー

テストする時間が取れないので、思いついたコード(未テスト)を書いておきます。


ページ分割をしたいのではなく、ショートコードで抽出されるデータを元に、10件(行)ごとに「テーブル[01]」と「テーブル[02]」のように分け、それぞれをショートコード[01]、ショートコード[02]、ショートコード[03] ・・・ のように増やしていきたいのです。

ということであれば...

まず、while ( have_rows( 'over_report_list' ,$pid ) ) : the_row();endwhile; は、すべてのデータを取得するまで、ループを回すので、ループ内でデータを表示させるとすべてのデータが表示されます。

実現方法としては、ループ内で、いま何個目の値を表示しているか判断して出力することになると思います。

いろいろな方法があると思いますが...

思いついた例だと [overtimeList start=1 count=10] のように開始位置と個数を与えるのが良いでしょうか。
とりあえず、思いついたコードの例なので、テストしていませんので、試す場合は、自己責任で...

function overtime_list_223280( $atts ) { # 繰り返しフィールドの全データを取得 $rows = get_field('over_report_list', $pid); $row_cnt = count($rows); # ショートコードのパラメータを取得。 $atts = shortcode_atts( array( 'start' => 1, 'count' => $row_cnt ), $atts, 'overtimeList' ); # 開始位置を確認 ( データ個数の範囲外の場合は、先頭データ(1個目)を設定 ) if( ( $atts['start'] > 0 ) && ( $atts['start'] < $row_cnt ) ){ $start ~ $atts['start'] -1 } esle { $start = 0; } # 個数を確認 ( 個数の範囲外は、データ個数から開始位置を引いた個数を設定 ) if( $atts['start'] + $atts['count'] < $row_cnt ){ $count = $atts['count']; } else { $count = $row_cnt - $start; } $gt_value = "<table>\n"; if( $rows ){ # for ループで、$start から $count 個数をループで取り出す。 for( $i = $start ; $i < $count ; $i++ ){ $gt_value .= "<tr>"; $gt_value .= "<td>" . $rows[$i]['over_report_name'] . "</td>"; $gt_value .= "</tr>\n"; } } $gt_value .= "</table>\n"; return $gt_value; } add_shortcode('overtimeList','overtime_list_223280');

参考:

投稿2019/11/20 07:33

CHERRY

総合スコア25218

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問