• 解決済 humao

    (@humao)


    参考サイト:WordPress ページングはやめてAjaxローディングにする(http://hijiriworld.com/web/wp-ajax-loading/)

    やりたい事
    1.singleページにてバックナンバー(表示中の記事より過去の投稿のみ)の一覧表示
    2.一覧の読み込みを5件ずつAjaxローディングで非同期にしたい

    うまくいかない事
    SQL発行の際に、post_dateがうまく取得・比較できない

    コード
    ほぼ参考サイトのままですが、header.php、single.php、more-disp.phpの3ファイルにまたがっています

    【header.php】(jQuery読み込みとJavascript)

    <script type="text/javascript">
    var now_post_num = 5; // 現在表示されている数
    var get_post_num = 5; // 一度に取得する数
    
    $(function() {
        $("#more_disp a").live("click", function() {
    
            $("#more_disp").html('<img class="ajax_loading" src="画像URL" />');
    
            $.ajax({
                type: 'post',
                url: 'more-disp.phpまでのURL',
                data: {
                    'now_post_num': now_post_num,
                    'get_post_num': get_post_num
                },
                success: function(data) {
                    now_post_num = now_post_num + get_post_num;
                    $("#single-list").append(data);
                    $("#more_disp").remove();
                    $("#single-list").append('<div id="more_disp"><a href="#">もっと表示</a></div>');
                }
            });
            return false;
        });
    });
    </script>

    【single.php】(デフォの5件を表示)

    <section id="single-list">
    <?php
    function my_posts_where( $where = '' ) {
      global $post;
      $where .= " AND post_date < '"
             . $post->post_date . "'";
      return $where;
    }
    add_filter( 'posts_where', 'my_posts_where' );
    // 表示中の記事より古いもの限定
    
    $posts = get_posts( array(
      'posts_per_page' => 5,  // 表示件数を指定します。
      'suppress_filters' => false,
    ) );
    remove_filter( 'posts_where', 'my_posts_where' );
    foreach ( $posts as $post ) {
      setup_postdata( $post );
    ?>
                <article>
                    <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
                </article>
    <?php
    }
    wp_reset_postdata();
    ?>
        <div id="more_disp"><a href="#">もっと表示</a></div>
    </section>

    【more-disp.php】(SQLの発行)

    <?php
    require_once("../../../wp-config.php");
    
    $now_post_num = $_POST['now_post_num'];
    $get_post_num = $_POST['get_post_num'];
    $sql = "SELECT
            $wpdb->posts.ID,
            $wpdb->posts.post_title,
            $wpdb->posts.post_excerpt
        FROM
            $wpdb->posts
        WHERE
            $wpdb->posts.post_type = 'post' AND $wpdb->posts.post_status = 'publish'
            $wpdb->posts.post_date DESC
        LIMIT $now_post_num, $get_post_num";
    
    $results = $wpdb->get_results($sql);
    $html = "";
    foreach ($results as $result) {
        $html .= '<article>';
        $html .= '<h2><a href="'.get_permalink($result->ID).'">'.apply_filters('the_title', $result->post_title).'</a></h2>';
        $html .= '';
        $html .= '</article>';
    }
    echo $html;
    ?>

    ↑※このままのコードで実行し「もっと表示」クリックでは”最新”記事から数えて6~10番目の記事が読み込まれてしまいます。
    本当はsingle.phpでデフォ表示しているリストの続きを読み込みたい。
    (続き→過去記事リストの6~10番目読み込み、以後続き)

    more-disp.phpの$sql発行の際にWHEREに
    AND $wpdb->posts.post_date < 『表示中の記事のpost_data』
    を入れればうまく過去の記事のみで順番に読み込みできるのではないかと考えました。

    しかし『表示中の記事のpost_data』をうまく変数で指定できず行き詰ってます。
    アドバイスなど頂けますと助かります。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック投稿者 humao

    (@humao)

    自己解決しましたので、解決済みとさせていただきます。
    ありがとうございました

1件の返信を表示中 - 1 - 1件目 (全1件中)

トピック「singleページでの日時指定SQLの発行(Ajaxローディング・Javascript関係)」には新たに返信することはできません。