サポート » 使い方全般 » カスタムフィールドで締切間近を表示したい

  • 解決済 jodan23

    (@jodan23)



    全くの素人で申し訳ございませんが教えていただけると助かります。

    カスタムフィールド値で締切間近の投稿のみ表示させたいと思っています。
    本日から一週間後までです。
    現在、下記のようにphpに記述して表示はしているのですが、
    一週間後のみ毎日、手入力で日にちを入れなおしています。
    この一週間後までを自動で表示できるように、下記の記述をどう変えればよいのか
    教えていただけないでしょうか。

    (カスタムフィールドキー;締切日)
    (カスタムフィールド値;y/m/d)

    (functions.phpに下記記載済み)

    global $my_where;

    function my_posts_where( $where ) {
    global $my_where;
    return $where . $my_where;
    }

    function my_query_posts( $query ) {
    global $wpdb, $my_where;

    $q = wp_parse_args( $query );
    $my_where = ”;

    if ( ! empty( $q[‘meta_key’] ) && ! empty( $q[‘meta_between’] ) ) {
    $dates = explode( ‘,’, $q[‘meta_between’] );
    if ( 2 == count( $dates ) ) {
    foreach( $dates as &$締切日 )
    if ( ‘TODAY’ == strtoupper( $締切日 ) )
    $締切日= date( ‘Y/m/d’ );

    $my_where = $wpdb->prepare( ” AND $wpdb->postmeta.meta_value BETWEEN %s AND %s “, $dates[0], $dates[1] );
    }
    }

    add_filter( ‘posts_where’, ‘my_posts_where’ );
    query_posts( $query );
    remove_filter( ‘posts_where’, ‘my_posts_where’ );
    }

    (表示させる箇所に下記記載済み)

    <?php get_query_var(‘paged’); ?>
    <?php my_query_posts(‘meta_key=締切日&meta_between=today,2018/08/02&orderby=meta_value&order=ASC&posts_per_page=9&paged=’.$paged);?>

    以上、よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • モデレーター のむらけい

    (@mypacecreator)

    要するに、最後の方で「2018/08/02」と書いているところを動的に今日+7日にできればよい、ってことでしょうか?

    PHPのstrtotime関数あたりで日付の足し算ができるので、変数に入れるとかして置き換えてあげればどうでしょう?
    https://qiita.com/ritukiii/items/c3d701d24030227d7646

    モデレーターさん
    こんにちは。

    要するに、言われているようにそういうことなのです。

    「2018/08/02」のところを色々やってみたのですが、うまく表示できません。
    全くの素人なもので・・・
    「2018/08/02」を具体的にどう記載するのか、
    functions.php はそのままでよいのか

    教えていただけると助かります。

    CG

    (@du-bist-der-lenz)

    「2018/08/02」のところを色々やってみた、ことを書き出すことで、理解を進めていくうえでの整理が出来ます。ポイントの指摘も容易になりますので、がんばってください。その経過を見ながら、functions.phpの記述を、外してみたり戻してみたりするのは考え方の助けになるでしょう。

    下記コードは1週間後 (7日後) の日付を表示するコードの例です。参考になりませんか?

    $endday = date( 'Y/m/d', strtotime( '+7 day', strtotime( date_i18n( 'Y/m/d' ) ) ) );
    echo '1週間後は、2018/08/02 です。';
    echo '1週間後は、' . $endday . ' です。';

    CG さん
    ishitakaさん
    ありがとうございます。

    下記コードをfunctions.phpに追加
    $endday = date( ‘Y/m/d’, strtotime( ‘+7 day’, strtotime( date_i18n( ‘Y/m/d’ ) ) ) );

    表示させる「2018/08/02」部分に「’ . $endday . ‘」を記述したのですが表示しませんでした。
    その他いろいろやったみたのですが、うまくいきません。

    素人で申し訳ありません。
    まだいろいろ試してみます。

    大変参考になりました。

    テンプレートの表示させる箇所に、

    <?php
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    $endday = date( 'Y/m/d', strtotime( '+7 day', strtotime( date_i18n( 'Y/m/d' ) ) ) );
    my_query_posts( 'meta_key=締切日&meta_between=today,' . $endday . '&orderby=meta_value&order=ASC&posts_per_page=9&paged=' . $paged );
    ?>

    短いコードなので理解した上で自分なりにコーディングしてみてください。
    なお、これ以上は手取り足取りになってしまいますのでアドバイスすることは残念ながらできません。ご了承ください。

    ishitakaさん
    ありがとうございます。

    ご指示どおりテンプレートに記載したところ、
    思っているように表示されました。

    涙がでそうです。

    また、今までのみなさん、手取り足取りありがとうございました。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • このトピックに返信するにはログインが必要です。