サポート » 使い方全般 » ショートコード内で時間によるフィルターをかけたい

  • いつもお世話になっております。
    下記のようなショートコードで特定のタグとカテゴリに属する記事の
    リンク付きリストを記事内に表示しています。

    このショートコード内に時間によるフィルターをつけて、
    「昨日以降、1000日後までのリンクのみ表示する。」
    ということを実現させたいのですが、
    うまくいきません。

    function sc_liste($atts, $content = null) {
            extract(shortcode_atts(array(
                    "num" => '5',
    "tag" => '',
                    "cat" => ''
            ), $atts));
    
            global $post;
            $myposts = get_posts("tag='.$tag&category=$cat");
            $retour='
    <ul>';
    
    if(count($myposts)){
    	foreach($myposts as $post) :
    		setup_postdata($post);
    		$retour.='<li><a href="'.get_permalink().'">'.the_title("","",false).'</a></li>';
    	endforeach;
    	$retour.='</ul> ';
    }else{
    	$retour = '存在しません';
    }
    return $retour;
    }
    
    add_shortcode("list", "sc_liste");

    時間によるフィルターをつけるため、次のコードをショートコード内にいれていろいろと試してみましたが、うまくいきません。

    function filter_where($where = '') {
        $where .= " AND post_date >= '" . date('Y-m-d', strtotime('-1 days')) . "'" . " AND post_date <= '" . date('Y-m-d', strtotime('+1000 days')) . "'";
        return $where;
      }
    add_filter('posts_where', 'filter_where');

    どなたかご教授お願いいたします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • ちょっと

    「昨日以降、1000日後までのリンクのみ表示する。」

    の部分が理解できていないのですが、つまり未来の日付の記事?があり、今日と過去を除くリンクリストを生成したいということでしょうか?

    あまりコードもちゃんと見ていませんが、get_postsしているならその内容をループさせてしまえば良くないですか?orderby=post_dateとかしておいて未来の日付がでてきたら表示を開始するとか?(今日までの日付は飛ばす)もしくはget_postsしたものを一度ループさせて、過去の日付だったら配列から削除するを繰り返して・・・まあどっちも同じかw

    前提条件を間違っていたらすみません・・・参考になれば。

    トピック投稿者 Naoki-Jo

    (@naoki-jo)

    いつもありがとうございます。

    「昨日以降、1000日後までのリンクのみ表示する」
    というのは

    未来投稿がOKで未来の日付の記事があります。
    今日の記事は除く必要はないので、今日の記事も含めて
    「昨日以降、1000日後までのリンクを表示」
    というのがしたいことです。

    orderby=post_dateとかしておいて未来の日付がでてきたら表示を開始

    これはどのようにすればいいのかわかりません。
    ご教授ください。
    よろしくお願いいたします。

    これはどのようにすればいいのかわかりません。
    ご教授ください。

    なるほど。ショートコードを作っていたようですのでコードはそれなりに読めると判断していましたが違いましたか?

    orderby=post_dateとかしておいて未来の日付がでてきたら表示を開始」というのは、$myposts = get_posts("tag='.$tag&category=$cat");の部分を$myposts = get_posts("orderby=post_date&order=ASC&tag='.$tag&category=$cat");などに変更すれば$mypostsの中身は日付の昇順でソートされますので、その下のforeach($myposts as $post) :直下くらいでif分岐させて表示・非表示を制御すれば可能でないかな?と言うことですね。

    いずれにせよ検証はしていませんので、ご自身で試してみるしかないと思いますよ;)
    コード打っている時間がないのでアイデアだけですみません。

    トピック投稿者 Naoki-Jo

    (@naoki-jo)

    コードについては調べながらしているので、わかる部分とわからない部分があります。

    $genzai=date('Ymd');
    $toukoujikoku=the_date('Ymd', '', '', false);
    if($toukoujikoku>=$genzai){}

    のようにして、現在時刻と記事の時刻を比較して、
    現在時刻より記事の時刻が大きければ表示とすればいいのかと思い、
    上記のコードをこの質問の最初に書いてあるコードに入れて試しているのですが、
    うまくいきません。

    どうればいいのか教えてください。
    よろしくお願いします。

    date('Ymd')

    う~ん、これはどうかと・・・
    通常時間を比較する場合はタイムスタンプで行います。phpでタイムスタンプを取得する方法を調べれば簡単だと思いますよ;)

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「ショートコード内で時間によるフィルターをかけたい」には新たに返信することはできません。