私は「自宅の「注目の画像」(ブログインデックス)を運が悪かったので使おうとしています。」はすべてのページで機能しますが、ホームでは機能しません。

コードは次のようになります:

// Don"t use on single posts if (!is_single()) { if (is_home()) { if (function_exists("wp_get_attachment_thumb_url")) { $img = wp_get_attachment_image_src(get_post_thumbnail_id(),"full"); $featured_image = $img[0]; } } else { if (function_exists("wp_get_attachment_thumb_url") && has_post_thumbnail()) { $img = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),"full"); $featured_image = $img[0]; } } if ($featured_image) { ?> // A lot of code... <?php } } 

_thumbnail_id メタを使用してサムネイルを取得しようとしました。同じ結果です。

このコードは配置されています関数ファイルでは、問題はループ/投稿の注目画像を取得しようとしていることだと思います。

よろしくお願いします。

回答

「投稿のページ」を参照している場合は、試してください(コードの関連セクションのみが表示されます):

if (is_home() && get_option("page_for_posts") ) { $img = wp_get_attachment_image_src(get_post_thumbnail_id(get_option("page_for_posts")),"full"); $featured_image = $img[0]; } else { 

回答

これを行う人は、次の調整を検討することをお勧めします。

  1. get_queried_object()を使用して、現在のページ/投稿/インデックスのIDを取得します。ページに設定されているブログインデックスは、正しいページIDを返します。
  2. フルサイズの画像だけが必要な場合は、代わりにwp_get_attachment_url()を使用してください。 div id = “19f49efa13″>

これを簡単な方法で実現するために使用するクイック関数は次のとおりです:

/** * Custom Featured Image */ function custom_featured_image() { $queried_obj = get_queried_object(); // Don"t use on single posts (JUST FOR THIS DEMO) if ( is_single() ) return; // Get the featured image ID $image_id = get_post_thumbnail_id( $queried_obj->ID ); // Get the URL for the full sized image $image_src = wp_get_attachment_url( $image_id ); return $image_src; } 

私は個人的に、ネストされた条件付きロジックが多すぎるのを避けたいと思っています。関数を使用するとこれに役立ちます。

回答

ループにthe_post_thumbnailを使用するテンプレートファイルを介して、2つのクイックオプションがあります。データを一般的なブログ形式で出力しているため、上記の関数は機能しないか、ループ内で非常に奇妙に動作すると思います。

代わりに、メインループがある実際のテンプレートファイルでこのようなものを試してください。 (おそらくindex.phpまたはloop.php):

 //loop starts if ( has_post_thumbnail() ) { the_post_thumbnail(); } //the_content(); and other stuff //loop ends 

または、代わりにアクションを使用してメインループを変更する場合は、

たとえばfunctions.phpファイル内。

次のようなもの:

add_action( "pre_get_posts", "add_featured_image" ); function add_featured_image( $query ) { if( $query->is_main_query() && $query->is_home() ) { //your image code } } 

注意してください上記は、メインクエリとホームページの2つのパラメータをチェックしています。メインクエリかどうかを確認することは非常に重要です。そうでない場合、すべてのクエリが変更されます。

参照: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

コメント

  • あなたは'質問を正しく読んでいない、ユーザーは'ブログの投稿をループ内に入れたくない、ページの注目の画像が欲しいはブログのインデックスページに割り当てられています。これも私がやりたいことです。 has_post_thumbnail()はpage.phpで正常に機能しているようですが、index.phpで使用するとfalseを返します

回答

これは機能します。

<section style="background-image: <?php if (is_home() && get_option("page_for_posts") ) { $blog_home_id = get_option( "page_for_posts" ); echo "url(".get_the_post_thumbnail_url($blog_home_id, "full").")"; } else { echo "url(".get_the_post_thumbnail_url($post->ID, "full").")"; } ?>;"> 

これがお役に立てば幸いです。

回答

「投稿ページ」にいるとき、$ postはループの最初の「投稿」から始まります。 1つの方法は、「クエリされたオブジェクト」を使用することです。

$ wp_queryを印刷すると、次のように表示されます。[queried_object] [posts] [post]-注:queried_objectは、一部のページで空になる場合があります

// get_the_post_thumbnail_url( get_queried_object(), "fullsize" ); // or function ABC_get_the_thumbnail_url() { $queried_object = get_queried_object(); $thumbnail_url = get_the_post_thumbnail_url( $queried_object, "fullsize" ); if ( ! $thumbnail_url ) { return get_template_directory_uri() . "/your-path/default-image.jpg"; // or from a default option } return $thumbnail_url; } 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です