サポート » 使い方全般 » futureの記事も含め次記事をlinkしたい

  • 解決済 mimisuke

    (@mimisuke)


    未来(future)の日付の記事を投稿し、未来の記事だけ、近いイベントから一覧表示するTOPページ(イベント表示に使う)と、全ての記事を出す(過去も未来も表示)ページを作りました。
    1記事を表示する(single.php)について、
    下記のように指定していますが next_post_link が futureの記事は対象にならないみたいで表示がされません。previous_post_linkもpublishした記事だけリンクされています。
    これをfutureもpublishも合わせた対象の中でlinkを作りたいのですが
    方法は有りますでしょうか

    以下がシングルページにおける現状のコードです。

    <?php
    global $query_string;
    query_posts( $query_string . “&post_status=future,publish” );
    if (have_posts()) : while (have_posts()) : the_post(); ?>

    <div class=”navigation clearfix”>
    <div class=”alignleft leftbox”><?php previous_post_link(‘« %link’) ?></div>
    <div class=”alignright rightbox”><?php next_post_link(‘%link »’) ?></div>
    </div>
    <?php endwhile; else: ?>

    すいませんが、ご教授いただきたくお願い申し上げます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • Fumito MIZUNO

    (@php-web)

    wp-includes/link-template.phpの中にある、get_adjacent_postをいじくれば可能です(filterも用意されています)。

    ただしSQLの知識が必要になります。SQLの書き方が分からないのであれば、自分でget_adjacent_postをいじくるのは危険ですので、おやめください。

    トピック投稿者 mimisuke

    (@mimisuke)

    php-web様
    ご連絡ありがとうございます。
    大変助かります。
    SQLは扱えます。
    アドバイスいただいたget_adjacent_postを見ると
    joinを操作するapply_filtersがあるので、これを利用して
    できないか考えてみたいと思います。

    うまく行けば、ご報告いたします。

    早速のアドバイスありがとうございました。

    トピック投稿者 mimisuke

    (@mimisuke)

    とりあえず実験したところ

    $where = apply_filters( “get_{$adjacent}_post_where”, $wpdb->prepare(“WHERE p.post_date $op %s AND p.post_type = %s AND ( p.post_status = ‘publish’ OR p.post_status = ‘future’) $posts_in_ex_cats_sql”, $current_post_date, $post->post_type), $in_same_cat, $excluded_categories );

    という具合に publishだったところをfutureの記述をすれば目的のことができることを
    確認しました。
    filterを使用したまともな方法はこれから考えます。

    実験した際に、内部でキャッシュの不整合が起こるらしく
    記事が表示されなくなり焦りました。
    記事を更新すれば、再度キャッシュが構築され問題が無くなることが
    わかりましたが、
    (冷静に考えれば当たり前って感じですが、)
    phpファイルを戻しても不整合が戻らず、ちょっと冷や汗でした(笑い)。

    トピック投稿者 mimisuke

    (@mimisuke)

    結局、あまりきれいな実装は思いつかず

    function my_future_navi_link($in1) {
    $result = str_replace(“p.post_status = ‘publish'”,”( p.post_status = ‘publish’ OR p.post_status = ‘future’)”,$in1);
    return($result);
    }
    add_filter(‘get_previous_post_where’, ‘my_future_navi_link’);
    add_filter(‘get_next_post_where’, ‘my_future_navi_link’);

    というべたなコーディングをテーマ中のfinctions.php
    に追加することで実現しました。
    ちょっと元の記述が変わったらだめじゃんとおもいつつ

    以上です。

    php-web様のアドバイスがなければ、今も悩んでいたことでしょう
    ありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「futureの記事も含め次記事をlinkしたい」には新たに返信することはできません。