• 解決済 webarton

    (@webarton)


    こんにちは。プラグインThe Events Calendar(Version1.6.4)を使っていて、つまづいてしまったので投稿させて頂きます。

    デフォルトの機能で現時点以降のイベントがリスト/カレンダーで表示されるように、
    過去のイベントも別ページでリスト表示(本日より以前を降順で、5イベントずつページング)したいと思っています。

    現時点以降のイベントがリスト/カレンダーで表示されているのを、前にさかのぼれば
    過去も見られると思いますが、過去実績をよりわかりやすく表示したいためです。

    そうしたいのですが、やり方がよくわからなくてつまづいています。
    イベントの記事投稿日時でなく、wp_postmetaテーブルのmeta_valueにセットされているイベント開催日で表示させなくてはいけないので、query_postだとダメだと思って、SELECT文を作りました。

    http://localhost/xxxxxx/archive/ というページを過去実績ページとして、一覧表示はできたのですが、将来のことも考えるとページングさせたいと思いました。

    「Googleみたいなページング+α from PHP + MySQL BY しょきょたん」
    http://syokyotan.jugem.jp/?eid=3 )こちらのページを参考に、例えば
    http://localhost/xxxxxx/archive/?p=2
    で次のページが表示されることを期待したのですが、「リクエストされたページが存在しません」になってしまいます。

    この方法にこだわっているわけではないのですが、自分ではこれしか思いつきませんでした。

    どうしたらうまく表示できるか、どなたかアドバイス頂けないでしょうか。
    よろしくお願い致します。

    WordPress 3.0.1

    The Events Calendar
    http://wordpress.org/extend/plugins/the-events-calendar/

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

    (@webarton)

    すみません。今はこのように書いています。これをテンプレートとして、表示したいページで読み込んでいます。

    パーマリンクの設定を /%year%/%category%/%postname%/ としているから、
    これでは無理なのでしょうか。

    <?php
    /*
    Template Name: Category_Event
    */
    
    get_header(); ?>
    <div id="main">
    <?php
    global $wpdb;
     $query = "
     SELECT count(*)
     FROM $wpdb->postmeta AS pm, $wpdb->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実行
    $reccnt = $wpdb->get_var($wpdb->prepare($query));
    
    //取り出す最大レコード数
    $lim = 5;
    
    //最初と最後のページ番号を定義
    $first = 1;
    $last = ceil($reccnt / $lim);
    
    //表示するページ位置を取得
    $p = intval($_GET['p']);
    
    if ($p < $first) {
    $p = $first;
    }
    elseif ($p > $last) {
    $p = $last;
    }
    
    //表示するレコード位置を取得
    $st = ($p - 1) * $lim;
    
    //前後のページ移動数と表示数
    $page = 3;
    
    //前後$pageページ移動した際のページ番号を取得
    $prev = $p - $page;
    $next = $p + $page;
    
    //前後1ページ移動した際のページ番号を取得
    $prev1 = $p - 1;
    $next1 = $p + 1;
    
    //SELECTコマンドを実行して、$stレコード目から$lim件の各データを取得し、大きい順に並べる
    $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"
    . " LIMIT $st, $lim"
    ;
    $posts_per_page = 5;
    //  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
     }
    //ページ移動リンクの組み立て
    //1ページ前のページ
    if ($p > 1) {
    echo "<font size='1'><a href='./?p=$prev1'>></a></font> ";
    }
    
    //各ページ番号への移動リンクを表示
    for ($cnt = $p - $page; $cnt <= $last; $cnt++) {
    if ($cnt < 1) {
    $cnt = 1;
    }
    $pageno = "<font size='1'><a href='./?p=$cnt'>$cnt</a></font> ";
    
    //表示番号を指定数に区切る
    //ページ番号と現在のページが同一の場合は
    //リンク無しにする
    if ($cnt <= $p + $page) {
    if ($cnt == $p) {
    $pageno = "<font size='1'>$p</font> ";
    }
    echo $pageno;
    }
    }
    //
    
    //1ページ後のページ
    if (($next1 - 1) * $lim < $reccnt) {
    echo "<font size='1'><a href='./?p=$next1'>></a></font> ";
    }
    
    echo "<br>";
    
    //最初のページへ移動
    if ($p > 1) {
    echo "<font size='1'><a href='./?p=$first'>最初</a></font>&nbsp";
    }
    
    //前の$pageページへ移動
    if ($p > $page) {
    // << を $page"."ページ戻る にする事もできる
    echo "<font size='1'><a href='./?p=$prev'><<</a></font> ";
    }
    
    //次の$pageページへ移動
    if (($next - 1) * $lim < $reccnt) {
    // >> を $page"."ページ進む にする事もできる
    echo "<font size='1'><a href='./?p=$next'>>></a></font> ";
    }
    
    //最後のページへ移動
    if ($p < $last) {
    echo "<font size='1'><a href='./?p=$last'>最後</a></font> ";
    }
    
    ?>
    </div><!-- End: main -->
    <?php get_footer(); ?>
    トピック投稿者 webarton

    (@webarton)

    思いあまってこちらにも投稿してしまいまして、LVP8さんが助けて下さいました。
    http://ja.forums.wordpress.org/topic/5416?replies=8#post-22475

    こちらの内容で実現できました。

    <?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(); ?>

    最近、このプラグインを使い始めてここにたどり着きました。
    argsに「 ‘post_type’=>array(TribeEvents::POSTTYPE),」がないと動かないという点以外は動きました〜。いいですね、これ。

    ついでに、Shortcode Exec PHP プラグインを使って、これをショートコードにできるようにしてみました。
    http://kitaney.jp/~kitani/tools/wordpress/code_with_shortcode_exec_php_plugin_ja.html#7

    にソース載せておきます。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「The Events Calendarの過去実績を表示したい」には新たに返信することはできません。