サポート » 使い方全般 » 詳細ページのないpostを作ってサイトを作りたい

  • 解決済 feast_prank

    (@feast_prank)


    お世話になっております。

    実現したいことは…
    特定のカスタムフィールドの値を持った記事(post)をsingle.phpでpublishさせずに、
    記事情報だけ、別のサイトで取得して表示させています。

    その上で、
    記事の詳細ページ(single.php)で『get_previous_post』『get_next_post』を使用して、
    ページ送りをつけているのですが、publishさせていないページも取得されてしまっています。

    publishさせない記事を登録するカテゴリや、
    カスタム投稿を作成すればうまくできるかもしれませんが、
    可能であれば、ページ送り部分の修正のみで対応したいです。

    なにとぞよろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    get_adjacent_post 関数内のフィルターフックを用いて、SQLをカスタマイズして実現することは可能ですが、それに伴うデータベースの構造やSQL文の知識も必要となります。

    トピック投稿者 feast_prank

    (@feast_prank)

    jim912さん

    回答ありがとうございます。

    get_adjacent_post 関数内のフィルターフックを用いて対応する方法は私も試してみたのですが、うまくいきませんでした。
    SQL文の知識がないため、どこが間違っていてうまくいっていないのかが判断できず対処できず困っています。

    下記が試してみた内容になりますので、
    可能であれば間違っている箇所など指摘お願いいたします。

    ■記述■
    function news_limited_get_adjacent_post( $where ) {
    global $wpdb;
    $where .= ” AND $wpdb->posts.ID NOT IN ( SELECT tr.post_id FROM $wpdb->postmeta AS tr WHERE tr.meta_key = ‘news_flag’ AND tr.meta_value = ‘1’)”;
    return $where;
    }
    add_filter( ‘get_previous_post_where’, ‘news_limited_get_adjacent_post’ );
    add_filter( ‘get_next_post_where’, ‘news_limited_get_adjacent_post’ );

    ■やりたいこと■
    ・カスタムフィールド『news_flag』の値を参照して、対象のポストを除外。

    なにとぞよろしくお願いいたします。

    $where .= " AND $wpdb->posts.ID NOT IN ( SELECT tr.post_id FROM $wpdb->postmeta AS tr WHERE tr.meta_key='news_flag' AND tr.meta_value='1')"

    の、$wpdb->posts.ID を p.ID に変更すれば動作するのではないでしょうか。

    トピック投稿者 feast_prank

    (@feast_prank)

    kjmtshさん

    回答ありがとうございます。

    $wpdb->posts.ID を p.ID に変更したところ想定の挙動を実現することができました。

    修正前後で何が違うかなどはわからないのですが、
    その辺は勉強していこうと思います。

    jim912さん、kjmtshさんありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「詳細ページのないpostを作ってサイトを作りたい」には新たに返信することはできません。