サポート » 使い方全般 » カスタム投稿ページに表示される、特定記事について

  • 解決済 natsu85

    (@natsu85)


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

    archive-news.php(カスタム投稿)に一覧を表示させ、表示しているある記事Aのみ、singleページへのリンクを設置しないようにしたいと思っております。

    この場合は、メインループにて条件分岐することは可能なのでしょうか?
    (postIDで条件分岐?もしくはスラッグ?)
    もしくは、メインループではなく、WP_Queryなどを使用したほうが良いのでしょうか?

    表示位置などの変更はなく、単純にhtmlの変更のみ(<a>タグのみ設置ありかなしか)行いたいと思っております。

    ご教授よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • ループ内では get_the_ID() で投稿のIDが取得できますので、これと記事AのIDを比較するif文で分岐できます。

    <?php if ( xxx == get_the_ID() ) { // 記事Aの場合 ?>
    タイトル
    <?php } else { // それ以外の場合 ?>
    <a href="....">タイトル</a>
    <?php } ?>

    こんな感じで、あとは適宜補ってください。

    LABE様

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

    <?php if ( 10 == get_the_ID() ) { //記事AのID ?>
        <?php the_title(); ?>
        <?php } else { //それ以外 ?>
    <a href="#"><?php the_title(); ?></a>
        <?php } ?>

    とし表示できました。

    理解がしきれていないのですが、
    get_the_ID()にて表示する記事IDを全て取得し、その中に記事A(ID)が含まれていたらリンクなしを表示させ、記事A以外だったらリンクありを表示させている
    という認識であっていますでしょうか?

    • この返信は5 ヶ月、 3 週間前に  natsu85 さんが編集しました。

    あっています。
    the_title() がループ中のある記事のタイトルを出力するように、 get_the_ID() はその記事のIDを返します。
    if-else 文を理解しきれていないのでしたら、WordPressのカスタマイズにはPHP言語の基本的な理解が不可欠ですので、今一度ご勉強されるべきかと思います。

    natsu85 さん

    未検証ですが、多分以下のコードをfunctions.phpに記入してみてはいかがでしょうか。

    
    <?php
    //functions.php
     
    function change_posts_per_page($query) {
        if ( is_admin() || ! $query->is_main_query() )
            return;
      
         
        if ( $query->is_archive('news') ) {
            $query->set( 'post__not_in', '1' );//除外IDを指定
        }
         
         
     
    }
    add_action( 'pre_get_posts', 'change_posts_per_page' );
     
    ?>
    

    ※パラメーターはコーデックスを参考にしてください。

    ID指定の部分は、管理ページをカスタマイズすれば、管理メニューから指定することも可能です。

    • この返信は5 ヶ月、 3 週間前に  photographer hiro. さんが編集しました。理由: 誤字修正
    • この返信は5 ヶ月、 3 週間前に  photographer hiro. さんが編集しました。理由: 追記

    @mura0403 さん
    それは特定の投稿をアーカイブから除外するコードですが、 @natsu85 さんの意図する動作ではないのではないでしょうか。

    @natsu85 さん
    上で「あっています」と言いましたが、よく読んでみれば「あっていない」ような気がします。
    アーカイブページのメインループでは、取得した(複数の)投稿を一つずつ順に処理します。
    get_the_ID() は、現在処理中の1件の投稿のIDを返します。
    if ( xxx == get_the_ID() ) は、「xxx(記事AのID)と get_the_ID() を比較し等しいならば」という意味になります。
    結果的に、ループ処理において記事Aに差し掛かった時にのみifブロックの処理が実行され、そうでない場合はelseブロックの処理が実行されます。

    お返事大変遅くなってしまい申し訳ございません。

    LABE様

    お返事ありがとうございます。

    get_the_ID()はその投稿IDだった場合は・・・
    ということは理解していたので、記事一覧などですと感覚が違うように感じていました。
    と言いますが、少し混乱していました。

    質問の内容は今なら少し違っていたと、今なら理解できます!
    ありがとうございました。

    mura0403様

    お返事大変遅くなってしまい申し訳ございません。

    特定の記事を除外(非表示)ではなく、基本ループ内で特定の記事のみ違う表示にしたかったのです。
    少し違いましたが、お答え頂いたことはすごく嬉しかったです!!
    お返事ありがとうございました!

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