サポート » 使い方全般 » ページング

  • 解決済 webarton

    (@webarton)


    こんにちは、あるページに取得したデータの一覧を表示しているのですが、ページングさせたいと思っています。テンプレートを作ってページで読み込んでいます。

    プラグインWP-PageNaviを入れているので、それを使えればと思ったのですが、単に

    <?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>

    と追加してもページングしないし、他にどういう方法でページングできるのかわからず困っています。

    他にもごちゃごちゃとやってみているのですが、解決せずに4日たってしまいました。
    ほんとにすみません、教えて頂けないでしょうか。
    よろしくお願い致します。

    それから、パーマリンクは /%year%/%category%/%postname%/ としています。

    こちらが現在のテンプレートです。

    <?php
    /*
    Template Name: Category_Event
    */
    
    get_header(); ?>
    <div id="main">
    <?php
    //過去開催イベントを降順に取得
    $query = "SELECT pm.meta_value,p.post_title,p.ID"
    . " FROM wp_postmeta AS pm, wp_posts p"
    . " WHERE p.ID = pm.post_id"
    . " AND pm.meta_key = '_EventStartDate'"
    . " AND pm.meta_value <= CURRENT_TIMESTAMP( 0 )"
    . " ORDER BY pm.meta_value DESC"
    ;
    //  sql実行
     $terms = $wpdb->get_results($query);
    //  sqlのデータを処理
     foreach ($terms as $value){
    ?>
         <?php echo the_event_start_date($value->ID); ?> <a href="<?php echo get_permalink($value->ID); ?>"><?php echo $value->post_title; ?></a>
    <?php echo get_the_post_thumbnail($value->ID, 'thumbnail'); ?>
    <?php
     }
    ?>
    </div>
    <?php get_footer(); ?>

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

    (@webarton)

    すみません、補足です。
    自分でやってみているのは、ページ数を$_GETで取得するやりかたなのですが、
    それですと2ページ以降をクリックしたときURLがの最後に「/?p=2」などとつく形になるため、「ページがありません」になってしまいます。

    $_GETでどのようにすれば「ページがありません」にならずに次のページが表示できるのか、解決できればと思いますが、特に$_GETにこだわっているわけではなく、他の方法があれば教えて頂けると大変嬉しいです。

    sql関連は分からないので見当違いかもしれませんが、この処理は、meta_key = _EventStartDate に値を持っている投稿を取得し、その値(日付や時間などの数値データ?)によりソート表示する、というものでしょうか?

    トピック投稿者 webarton

    (@webarton)

    言葉が足りずすみません。そうなんです、meta_key の値が _EventStartDate で、
    pm.meta_valueの値に日時が入っています。その日付が今日より前のデータを抽出しています。

    抽出して、一覧表示はできる状態です。

    sql の知識がないので、違う角度からになりますが、query_posts でいけそうな気がします。未検証ですが、こんな感じでどうでしょう。

    <div id="main">
    <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $posts_per_page = (get_query_var('posts_per_page')) ? get_query_var('posts_per_page') : get_option('posts_per_page');
    $currentTime = date('Y-m-d H:i:s', time()+32400);
    query_posts(array(
    	'posts_per_page' => $posts_per_page,
    	'meta_key' => '_EventStartDate',
    	'meta_compare' => '<=',
    	'meta_value' => $currentTime,
    	'orderby' => 'meta_value_num',
    	'order' => 'DESC',
    	'paged' => $paged
    ));
    while ( have_posts() ) : the_post();
    ?>
    
    <?php echo get_post_meta($post->ID, '_EventStartDate', true); ?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php echo get_the_post_thumbnail($post->ID, 'thumbnail'); ?>
    
    <?php endwhile; ?>
    </div>
    
    <?php
    if(function_exists('wp_pagenavi')) { wp_pagenavi(); }
    wp_reset_query();
    ?>
    トピック投稿者 webarton

    (@webarton)

    LVP8さん!!!ページングできましたーーーーーーーーー!!!!!!!
    書いてくださったほんとにほんとにありがとうございます!

    でも一つわからないことがありまして、今までのSQL結果は以下なのですが、

    2010年10月29日 リボンワーク
    2010年10月28日 12:00 AM ソープカービング
    2010年9月1日 4:00 PM イベント
    2010年5月29日 8:00 AM かこ
    2010年4月29日 8:00 AM かこ
    2010年4月4日 1:00 PM test
    2010年3月29日 8:00 AM かこ
    2010年2月1日 かこ
    2010年1月29日 8:00

    今回の結果は以下で、表示順が降順でなくなりました。

    1ページ目
    2010-10-28 00:00:00ソープカービング
    2010-10-29 00:00:00リボンワーク
    2010-01-29 08:00:00かこ
    2010-02-01 00:00:00かこ
    2010-03-29 08:00:00かこ

    2ページ目
    2010-04-29 08:00:00かこ
    2010-05-29 08:00:00かこ
    2010-09-01 16:00:00イベント
    2010-04-04 13:00:00tes

    meta_keyが日付型でなくて、longtext型だったのですが、それが原因でしょうか・・・

    'orderby' => 'meta_value_num',

    を変換すればよいのでしょうか。本当にすみません。

    5行目を下記に変更したらどうなりますか?
    ※時間を一桁表示にされているので、うまく拾えないかもですが・・・。
    $currentTime = date('Y年m月d g:i A', time()+32400);

    トピック投稿者 webarton

    (@webarton)

    LVP8さん、すみません!
    見直してみて、私がorder byで使いたかった日付が、meta_value_numでなくmeta_valueに入っていたので、以下の内容で実現できました!

    <?php
    /*
    Template Name: Category_Event
    */
    
    get_header(); ?>
    
    <div id="main">
    
    <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $posts_per_page = (get_query_var('posts_per_page')) ? get_query_var('posts_per_page') : get_option('posts_per_page');
    $currentTime = date('Y-m-d H:i:s', time()+32400);
    query_posts(array(
    	'posts_per_page' => $posts_per_page,
    	'meta_key' => '_EventStartDate',
    	'meta_compare' => '<=',
    	'meta_value' => $currentTime,
    	'orderby' => 'meta_value',
    	'order' => 'DESC',
    	'paged' => $paged
    ));
    while ( have_posts() ) : the_post();
    ?>
    
    <?php echo get_post_meta($post->ID, '_EventStartDate', true); ?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php echo get_the_post_thumbnail($post->ID, 'thumbnail'); ?>
    
    <?php endwhile; ?>
    </div>
    
    <?php
    if(function_exists('wp_pagenavi')) { wp_pagenavi(); }
    wp_reset_query();
    ?>
    <?php get_footer(); ?>

    私、勝手にquery_postsでは取得できないと思いこんでいました。
    これができないと本当に困ったので、助けてくださって本当にありがとうございます。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「ページング」には新たに返信することはできません。