サポート » 使い方全般 » 独自テーブルから出力したデーターをソートし件数を制御

  • いつもお世話になっております。

    プラグインの独自テーブルから出力した内容を全て取得しソートした内容を、件数で制御して1ページに表示する件数を指定したいと思っています。
    その際にページャーを表示させたいのですが、件数指定のやり方が色々やったのですが分かりません。

    現在のコードは

    function outschedule($day) {  //DBから該当の日付のデータを取得
        global $wpdb;
        $table_name = $wpdb->prefix . 'krc_schedules';
        $schedules = $wpdb->get_var(
            $wpdb->prepare("SELECT work FROM $table_name WHERE day = %s AND status = %d", $day, 0)
        );
        $works = unserialize($schedules);
        return  $works;  //配列にして返す
    }
    
    function schedulesHtml() {  //ショートコードの中身
        $day = isset($_GET["works"]) ? $_GET['works'] : date_i18n("Y-m-d");
        $works = outschedule($day);
        $len = 6; //+1
    
        $week = array("日", "月", "火", "水", "木", "金", "土");
        $w = date('w', strtotime($day));
    
        ob_start();
        echo '<nav class="attendance-calendar clearfix"><ul>';
        for ($i = 0; $i <= $len; $i++) {
            $y = date('D', strtotime('+'.$i.' day'));
            if ( date_i18n('Y-m-d', strtotime('+'.$i.' day')) == $day ) $y = 'target';
            echo '<li class="' . mb_strtolower($y) . '"><a href="' .  home_url( '/' )  . '/girl-attendance/?works=' . date_i18n('Y-m-d', strtotime('+'.$i.' day')) . '">' . strtoupper(date('n/j(D)', strtotime('+'.$i.' day'))) . '</a></li>';
        }
        echo '</ul></nav>';
    
        if (!$works) {
            //予定がない場合
            echo '<p class="attendance-message">' . date('n/j', strtotime($day));
            echo '(' . $week[$w] . ')';
            echo 'の出勤予定はございません。</p>';
        } else if ( $works !='rest' ) {
            echo '<div class="clearfix">';
            //postid順に配列に入っているのでs_order順にした配列を作る
            $works_array = array();
            foreach($works as $id => $val){
                $works_array[$val["s_order"]] = $id;
            }
            ksort($works_array);
            foreach ($works_array as $rder => $id){
                $paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
                $args=array(
                    'post_type' => 'krc_cast',
                    'post__in' => array($id),
                    'posts_per_page' => 6, //取得記事件数
                    'paged' => $paged
                );
                $wp_query = new WP_Query($args);
                while ($wp_query->have_posts()): $wp_query->the_post(); $counter++;
                if ($counter <= 1){
                    require(get_template_directory() . "/content-cast-first.php");
                }else{
                    require(get_template_directory() . "/content-cast.php");
                }endwhile;
                //wp_reset_query();
            }
            echo '</div>';
            echo '<div class="pagination">';
            // ページングを表示
            if (function_exists('wp_pagenavi')) { wp_pagenavi(); }
            // ループ処理のデータをリセット
            wp_reset_query();
            echo '</div>';
        } else {
            //休み
            echo '<p class="attendance-message">申し訳ありません。' . date('n/j', strtotime($day));
            echo '(' . $week[$w] . ')';
            echo 'の出勤予定者はおりません。</P>';
        }
        return ob_get_clean();
    }
    add_shortcode('scheduleshtml', 'schedulesHtml');

    今は専用の固定ページにてショートコードで表示させています。
    固定ページにて6件表示させて、6件以上ならページャーを表示。
    ページャーはWP-PageNaviを使用しています。

    さらに出力されたデーターをHOMEにて3件のみ表示させたいので、全て表示されてしまうのを制御したいです。
    ソートの仕方や出力の仕方があまり理解しきれていなく、行き詰まってしまいました。

    ご教授お願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • カスタム投稿の一覧を表示するコードですので、固定ページではなく、archive-krc_cast.php 等のカスタム投稿アーカイブテンプレート上で実装するのが無難な気がします。

    その際、WP_Queryを使うのでは無く、pre_get_posts フックを使うと、通常表示される投稿のクエリーに介入できるので、そこら辺でごにょごにょやるのが、ページングなどのトラブルは少ないはずです。

    ページングなどの実装に関しては、こちらが参考になるかもです。

    https://ja.forums.wordpress.org/topic/158003?replies=2

    また、SQLが得意でしたら、カスタムクエリなどを利用すると、SQL文に直接介入することも出来ます。オリジナルのテーブルがあるなら一番すっきりした解決かと思います。

    カスタムクエリ – WordPress Codex 日本語版

    トピック投稿者 natsu85

    (@natsu85)

    Toro_Unit (Hiroshi Urabe)様

    色々ありがとうございます。

    カスタム投稿を表示させているのですが、archive-krc_cast.phpはスタッフの一覧で使用しています。
    条件分岐も考えたのですが、スタッフ一覧と出勤予定(上記のコード)での条件分岐をどのようにするか…
    ブログや他のカスタム投稿(krc_cast以外もあり)などの一覧はindex.htmlで表示させているので、表示させるのであれば専用のテンプレートを使用するのが一番だと思いますが、スタッフ一覧と出勤予定の表示する内容が少し違うので、勉強不足だとは思うのですが、結果固定ページに行き着いた状態です。

    このような状態の場合、固定ページ以外で表示させる以外で表示させる方法はありますでしょうか??

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「独自テーブルから出力したデーターをソートし件数を制御」には新たに返信することはできません。