• 解決済 nice-guy

    (@nice-guy)


    みなさん、あけましておめでとうございます。
    今年もよろしくお願いします。
    さて、早速質問です。serch.phpについてです。現状次の様なコードを使用しています。


    /*   ここから ↓ serch.php */
    <?php get_header(); ?>
    <div class="page-inner">
    <div class="page-main" id="pg-search">
    <form class="search-form" role="search" method="get" action="<?php echo esc_url( home_url() ); ?>">
    <div class="search-box">
    <input type="text" name="s" class="search-input" placeholder="キーワードを入力してください" value="<?php the_search_query(); ?>" />
    <button type="submit" class="button button-submit">検索</button>
    </div>
    </form>
    <div class="searchResult-wrapper">
    <?php if ( get_search_query() ): ?>
    <div class="searchResult-head">
    <h3 class="title">「<?php the_search_query(); ?>」の検索結果</h3>
    <div class="total">全<?php echo $wp_query->found_posts; ?>件</div>
    </div>
    <?php endif; ?>
    <ul class="searchResultLlist">
    <?php
    if ( have_posts() && get_search_query() ) :
    while ( have_posts() ) : the_post();
    ?>
    <li class="searchResultLlist-item">
    <a href="<?php the_permalink(); ?>">
    <div class="item-wrapper">
    <div class="image">
    <?php

    /*   ここから ↓ オリジナル */
    $image = get_the_post_thumbnail( get_queried_object()->ID, 'search' );  /* ※この行でエラー */
    if ( $image ):
    echo $image;
    else:
    echo '<img src="'. get_template_directory_uri(). '/assets/images/img-noImage.png">';
    endif;
    /*   ここまで ↑ オリジナル */
    ?>
    </div>
    <dl>
    <dt><?php the_title(); ?></dt>
    <dd class="description"><?php echo get_the_excerpt(); ?></dd>
    </dl>
    </div>
    </a>
    </li>
    <?php endwhile; ?>
    </ul>
    <div class="pager">
    <ul class="pagerList">
    <?php
    page_navi();
    ?>
    </ul>
    </div>
    <?php elseif( ! get_search_query() ): ?>
    <p> 検索ワードが入力されていません</p>
    <?php else: ?>
    <p> 該当する記事は見つかりませんでした。</p>
    <?php endif; ?>
    </div>
    </div>
    </div>
    <?php get_footer(); ?>
    /*   ここまで ↑ serch.php */

    これで検索するとサムネールと検索結果は表示されるのですが、サムネールの上に
    「Warning: Attempt to read property “ID” on null in (パス名)search.php on line ※この行でエラー」
    と表示されます。そこで生成AIに尋ねて
    /*   ここから ↓ オリジナル */

    /*   ここまで ↑ オリジナル */
    を以下の様に書き換えました。

    /*   ここから ↓ 修正版 */

    $queried_object = get_queried_object();
    if ($queried_object && isset($queried_object->ID)) {
    $image = get_the_post_thumbnail($queried_object->ID, ‘search’);
    if ($image) {
    echo $image;
    } else {
    // サムネイルが設定されていない場合の処理
    echo ‘

    デフォルト画像

    ‘;
    }
    } else {
    // IDがNullの場合の処理
    echo ‘画像が見つかりません’;
    }
    /*   ここまで ↑ 修正版 */

    これを実行すると、サムネールがある記事もすべて画像がみつかりませんとなってしまいます。

    どのように書いたら、エラーも無くきちんとサムネール画像が表示されるか教えていただけませんか。
    よろしくお願いします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • (上記のご質問をそのままもう一度 AI に投げて解決策を導くのもアリかと思いますよー^^)

    サムネイルが正しく表示されるようにしつつエラーも解消するため、get_queried_object() の代わりにget_the_ID() を使用されるとどうでしょうか。

    トピック投稿者 nice-guy

    (@nice-guy)

    瀬戸内ことり (Setouchi Kotori) (@setouchikotori) さん、いつもありがとうございます。

    これ以上生成AIでは無理だと思っていたのですが、試しに再度上の文章ほぼそのままで聞いてみました。そうすると以下の回答が返ってきて、エラー無く思い通りの表示が出来ました。

    /*   ここから ↓ 修正版   */
    $post_thumbnail_id = get_post_thumbnail_id();
    if ($post_thumbnail_id) {
    $image = wp_get_attachment_image($post_thumbnail_id, 'search');
    if ($image) {
    echo $image;
    } else {
    echo '<img src="' . get_template_directory_uri() . '/assets/images/img-noImage.png" alt="No Image">';
    }
    } else {
    echo '<img src="' . get_template_directory_uri() . '/assets/images/img-noImage.png" alt="No Image">';
    }
    /*   ここまで ↑ 修正版 */

    恐るべし https://www.perplexity.ai/ 。どうもありがとうございました。

    解決したようでよかったです!

    AIはプロンプトを工夫し、壁打ちを繰り返すことで期待どおり (に近い) の答えをくれるようになると思います^^

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