サポート » 使い方全般 » トップの記事の表示期間を自動指定したい

  • 解決済 takashi331

    (@takashi331)


    はじめまして。
    素人なのですが、人にカスタムしてもらったものの使い勝手を直したく、自分でやっているので、ご意見いただければと思い投稿させていただきます。

    イベントのサイトなのですが、トップページに開催日が近いものから上から順番に記事タイトルのリンクを並べています。
    管理画面に開催日の日付のフィールドをカスタム追加してあり、投稿日ではなくその日付が起点になって記事の並べ替えや、表示期間が決まっています。

    日付(開催日)が過ぎた記事のリンクはトップからは消えて行く仕様なのですが、リンクが消えるタイミングが、開催日の日付となっていて、当日にそのリンクが消えてしまうと、情報にアクセス出来なくなる問題があるので、開催日の翌日に消えるように出来ればと思っています。

    現状のトップの該当部分のソースはこのような形です。

    <?php
    
    $querystr = "
    SELECT wposts.*
    	FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
    	WHERE wposts.ID = wpostmeta.post_id
    	AND wposts.post_type = 'live'
    	AND wpostmeta.meta_key = 'rrd_custom_live_thisday'
    	AND wpostmeta.meta_value > '".date('Ymd')."'
    	AND wposts.post_status = 'publish'
    	ORDER BY wpostmeta.meta_value ASC
    	LIMIT 5
    ";
    
    $pageposts = $wpdb->get_results($querystr, OBJECT);
    
    if ($pageposts)
    {
    	foreach ($pageposts as $post)
    	{
    
    ?>
                    <dt><?php echo get_post_meta($post->ID,'rrd_custom_live_y',true).'/'.get_post_meta($post->ID,'rrd_custom_live_m',true).'/'.get_post_meta($post->ID,'rrd_custom_live_d',true); ?> <?php echo get_post_meta($post->ID,'rrd_live_space',true); ?><br />
    
    <?php if($meta_data = get_post_meta($post->ID,'rrd_live_open',true)){ echo'OPEN '.$meta_data.'&nbsp;&nbsp;';} ?>
    <?php if($meta_data = get_post_meta($post->ID,'rrd_live_start',true)){ echo'START '.$meta_data.'&nbsp;&nbsp;';} ?>
    <?php if($meta_data = get_post_meta($post->ID,'rrd_live_adv',true)){ echo'前売 '.$meta_data.'&nbsp;&nbsp;';} ?>
    <?php if($meta_data = get_post_meta($post->ID,'rrd_live_door',true)){ echo'当日 '.$meta_data.'&nbsp;&nbsp;';} ?>
    
    </dt>
                    <dd><a href="<?php echo get_bloginfo('url').'/live/'.$post->ID.'.php'; ?>"><?php the_title(); ?></a></dd>
    <?php
    	}
    }
    ?>

    どのようにすればやりたいことができるか、アドバイスいただけますと嬉しいです。
    よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • AND wpostmeta.meta_value > '".date('Ymd')."'

    この一行を

    AND wpostmeta.meta_value >= '".date('Ymd')."'

    にすればいいと思います
    (dateで日付の書式を変えて比較しているのですが
    現在のものでは現在の時間超過の場合
    変更後は現在の時間以上の場合
    未満や以下、以上や超過と言った比較ですね)
    ついでに説明すると

    //データベースへアクセスするためのクエリ文を生成し$querystrへ格納

    $querystr = "クエリ文"

    //選択カラム(列)取得したい必要な情報、postsに含まれる情報を全て選択

    SELECT wposts.*

    //FROM テーブル名(二つ選ばれてますがDBを覗けばわかると思います
    //恐らく接頭辞は”w”、postsとpostmeta、両方とも投稿情報についてです)

    FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta

    //ここからは条件式、上のものは最悪”おまじない”で
    //二つのテーブルの情報が同じ列を取得

    WHERE wposts.ID = wpostmeta.post_id

    //取得した投稿情報の種類が”live”なら・・・”page”や”image”と言った画像やページも取得できます

    AND wposts.post_type = 'live'

    //カスタムフィールドの値

    AND wpostmeta.meta_key = 'rrd_custom_live_thisday'

    //肝心なのがココ、メタ情報に恐らく日時を入れてると思います

    AND wpostmeta.meta_value > '".date('Ymd')."'

    //ステータス情報”publish”は公開中、公開しているものだけを抽出

    AND wposts.post_status = 'publish'

    //ソートについて、日時を降順で表示(だったはず)

    ORDER BY wpostmeta.meta_value ASC

    //一度に表示する件数ですね、5件まで取得です

    LIMIT 5

    ここまでがクエリ文生成

    //クエリを実行してDBからの値を取得します、そしてpagepostsに結果を代入

    $pageposts = $wpdb->get_results($querystr, OBJECT);

    //結果が取れなかった場合falseとなるので結果があればifの中へ入ります

    if ($pageposts){

    //取れた件数分ループします(配列 as 一時変数)

    foreach ($pageposts as $post){

    //以下表示処理が延々と続く

    分かりづらいかもしれませんが多分こんな感じだと思います

    トピック投稿者 takashi331

    (@takashi331)

    ありがとうございます!!
    アドバイスの内容でやりたいことができました^^
    詳しく解説いただいて、本当にありがとうございます。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「トップの記事の表示期間を自動指定したい」には新たに返信することはできません。