マルチサイトの親ページにアイキャッチ画像
-
こんばんは。
マルチサイトにて親サイトに子サイト(3ブログ)を追加して構築しています。
http://notnil-creative.com/blog/archives/774ページにて
ご案内いただいている方法にて、
子サイトの新着記事を親サイトのトップページに記事の表示は出来たのですが
その子サイトの記事ごとに登録しているアイキャッチ画像も表示させたいのですが
どうにもわからなく投稿させていただきました。参考サイトなども含め、ご教授いただければ幸いです。
どうぞよろしくお願いいたします!!
-
テンプレートの記事表示のループ内で、アイキャッチ画像を表示したい箇所に以下を追記します。
if ( has_post_thumbnail() ) { the_post_thumbnail(); }
関数リファレンス/add_theme_support#アイキャッチ画像の表示
WordPress「アイキャッチ画像」の使い方 – 小粋空間popupさま
ご返答ありがとうございます。
現在、下記コードをindex.phpに記載しています。
アイキャッチ画像を登録した記事に付いてはサムネイル表示して
アイキャッチ画像がない場合は指定画像を表示したいのです。ご教授いただきました内容はどこにかけばよろしいのでしょうか。
お手数をおかけしますが、ご教授くださいませんでしょうか。
よろしくお願いいたします。===========================================================
<?php $entryAry = get_blog_all_entry(array(1,9)); // 除外したいサイトのblog_id を配列で指定 //記事があれば表示処理 if ( $entryAry ) : ?> <div class="idx_conts cf"><ul class="idx_conts-ul cf"> <?php //1ページ内の投稿数(管理画面「表示設定」)分だけループ $j = 0; foreach ( $entryAry as $k => $v ) : if( $j < get_option('posts_per_page')): ?> <li><p><a>" style="float:left; margin-right:10px;"> <?php the_post_thumbnail(array(250,165)); ?></a><a>" title="<?php echo $v['title']; ?>の詳細へ"><?php if ( has_post_thumbnail()) { the_post_thumbnail(array(250,165)); } else { // 投稿サムネイルがない場合 echo '<img src="/img/details/p_preimg.jpg" width="250" height="165" />'; } ?></a></p><h2><a>" title="<?php echo $v['title']; ?>の詳細へ"><?php echo $v['title']; ?></a></h2><?php if($v['blog_id']!=1): //本サイト以外の場合、子サイト名を表示 ?><h3 class='BlogName'>[<a>"><?php echo $v['blogname']; ?></a>]</h3><?php else: ?> <h3 class='BlogName'>[<a>" class='Hidden'><?php echo $v['blogname']; ?></a></h3></li> <?php endif; ?> <?php $j++; endif; endforeach; ?> </div> <?php else: ?> <p>該当記事はありません。</p> <?php endif; ?>
いきなり参考サイトを変更されても困ります・・・
get_blog_all_entry()がどんなデータを返すのか、関数が行っている処理を見ないと確認できません。(参考サイトを見つけたので分かりましたが。)
どのように表示したいのか分かりませんので、上記のコードからの推測になります。
<li><p style="float:left; margin-right:10px;"> <a href="<?php echo get_blog_permalink($v['blog_id'], $v['ID']); ?>" title="<?php echo $v['title']; ?>の詳細へ"><?php if ( has_post_thumbnail( $v['ID'] ) ) { echo get_the_post_thumbnail( $v['ID'], array(250,165) ); } else { // 投稿サムネイルがない場合 echo '<img src="/img/details/p_preimg.jpg" width="250" height="165" />'; } ?></a> </p> <h2><a href="<?php echo get_blog_permalink($v['blog_id'], $v['ID']); ?>" title="<?php echo $v['title']; ?>の詳細へ"><?php echo $v['title']; ?></a></h2> <?php if($v['blog_id']!=1): //本サイト以外の場合、子サイト名を表示 ?> // 以降略
上記コード内で以下のようになっていた部分は修正してありますが、省略した箇所についてはそのままですので、自分で確認しながら修正してください。
・おそらく段落pタグに指定するはずのstyle属性がaタグより後ろ、HTML要素がない状態で出ている。<li><p><a>" style="float:left; margin-right:10px;">
・リンクのaタグがいきなり閉じられて、title属性が外側に出ていて、さらにhref属性が抜けている
<a>" title="<?php echo $v['title']; ?>
popupさま
おはようございます。
意図を説明ぜずに勝手に進めてしまい失礼しました。
また、にも関わらずお調べいただいた上のご回答感謝いたします。さて、教えていただきましたとおり、
細かな箇所を修正し試してみましたがサムネイルは表示されず。。。親ブログのindex.phpに
<?php $entryAry = get_blog_all_entry(array(1,9)); // 除外したいサイトのblog_id を配列で指定 //記事があれば表示処理 if ( $entryAry ) : ?> <div class="idx_conts cf"><ul class="idx_conts-ul cf"> <?php //1ページ内の投稿数(管理画面「表示設定」)分だけループ $j = 0; foreach ( $entryAry as $k => $v ) : if( $j < get_option('posts_per_page')): ?><li><p><a href="<?php echo get_blog_permalink($v['blog_id'], $v['ID']); ?>" title="<?php echo $v['title']; ?>の詳細へ"><?php if ( has_post_thumbnail( $v['ID'] ) ) { echo get_the_post_thumbnail( $v['ID'], array(250,165) ); } else { // 投稿サムネイルがない場合 echo '<img src="/img/details/p_preimg.jpg" width="250" height="165" />'; } ?></a></p><h2><a href="<?php echo get_blog_permalink($v['blog_id'], $v['ID']); ?>" title="<?php echo $v['title']; ?>の詳細へ"><?php echo $v['title']; ?></a></h2><?php if($v['blog_id']!=1): //本サイト以外の場合、子サイト名を表示 ?><h3 class='BlogName'>[<a href="<?php echo $v['siteurl']; ?>"><?php echo $v['blogname']; ?></a>]</h3><?php else: ?> <h3 class='BlogName'>[<a href="<?php echo $v['siteurl']; ?>" class='Hidden'><?php echo $v['blogname']; ?></a></h3></li> <?php endif; ?> <?php $j++; endif; endforeach; ?> </ul></div> <?php else: ?> <p>該当記事はありません。</p> <?php endif; ?>
を記載しましたが、表示されませんでした。。。
その他の設定として、
親ブログのfunction.phpにfunction get_recentposts_from_network( $args = null ) { $defaults = array( 'num' => 10, 'perblog' => 1, 'start' => 0 ); $r = wp_parse_args( $args, $defaults ); // 全ブログのBLOG_IDを取得 global $wpdb; $blogs = $wpdb->get_results( $wpdb->prepare( "SELECT blog_id FROM wp_blogs ORDER BY blog_id" ) ); if( is_array( $blogs ) ) { reset( $blogs ); // 各ブログの最新記事を指定件数取得する foreach( $blogs as $blog ) { switch_to_blog( $blog->blog_id ); $posts = get_posts( "numberposts=" . $r['perblog'] ); if( $posts ) { foreach( $posts as $post ) { $recent_posts[] = $post->post_date; $post->blog_id = $blog->blog_id; $post_list[] = $post; } // endforeach unset( $posts ); } // endif ( $posts ) restore_current_blog(); } // endforeach // 投稿日時で並べ替える arsort( $recent_posts ); reset( $recent_posts ); foreach( (array) $recent_posts as $key => $details ) { $t[$key] = $post_list[$key]; } // endforeach unset($recent_posts); $recent_posts = $t; } //endif ( is_array( $blogs ) ) if( $recent_posts ) return array_slice( $recent_posts, $r['start'], $r['num'], true ); return array(); }
親ブログと各子ブログのfunction.phpに
function mysetup() { add_theme_support( 'post-thumbnails' ); } add_action( 'after_setup_theme', 'mysetup' );
を記載しています。
なにぶん、不理解のうえ間違い箇所の意味すらわかっていない状態です。。。
ご迷惑をおかけしますが、ご教授くださませんでしょうか。どうぞよろしくお願いいたします。
http://notnil-creative.com/blog/archives/774
上記参考サイトで紹介している方法で、子サイトの新着記事を親サイトのトップページに表示することは出来たのではないのですか?
テンプレートで記事を取得する関数をget_recentposts_from_network()からget_blog_all_entry()に変更したのでしたら、functions.phpに記述する関数も変更する必要があります。
$entryAry = get_blog_all_entry(array(1,9)); // 除外したいサイトのblog_id を配列で指定
get_blog_all_entry()を使用して表示する上記コードの他に、同じ記事内に、get_blog_all_entry()の処理内容を記述したコード’function get_blog_all_entry( $~ )も紹介されていたと思います。
そのコードをfunctions.phpに追加してください。
その他、switch_to_blog()していないのが原因の可能性がありますので、foreachループ内でアイキャッチ画像の有無を判別して表示する記述より前に追加してみてください。
if( $j < get_option('posts_per_page')): switch_to_blog( $v['blog_id'] ); ?><li><p><a href="<?php echo get_blog_permalink($v['blog_id'], $v['ID']); ?>" title="<?php echo $v['title']; ?>の詳細へ"><?php if ( has_post_thumbnail( $v['ID'] ) ) { echo get_the_post_thumbnail( $v['ID'], array(250,165) ); } else { /* 略 */ <?php endif; ?> restore_current_blog(); <?php $j++; endif; endforeach; ?>
元のブログに戻す関数も追加します。
popupさま
早速のご教授ありがとうございます!!
またまた説明不足でした。。。すみません。参考サイトにてご紹介いただいている方法で、子サイトの新着記事は表示できたのですが、
それプラス、それぞれの記事のアイキャッチを表示させたいのですができなくて。。。前回にご教授いただいた内容をプラスして私なりに修正変更してみたのですが
やはり記事は表示されるものの、サムネイルが出ない状態です。。親ブログに、各子ブログの新着記事を表示し、かつアイキャッチ画像をサムネイルとして表示して、アイキャッチ画像がない場合にはNoImageという画像を表示したい。
というのところです。$entryAry = get_blog_all_entry(array(1,9)); // 除外したいサイトのblog_id を配列で指定
といていたのは、新着記事一覧に親ブログと新着掲載の必要のない子ブログの記事も反映してしまうため、特定IDを排除しようとして記述していました。>get_blog_all_entry()を使用して表示する上記コードの他に、同じ記事内に、
>get_blog_all_entry()の処理内容を記述したコード’function get_blog_all_entry( $~ )
>も紹介されていたと思います。
>そのコードをfunctions.phpに追加してください。本当にすみません。。
私の無知故ですが、どのように記述したらよいのでしょうか。。重ね重ね大変恐縮ですが、ご教授くださいますよう
よろしくお願いいたします!!functions.phpに’function get_recentposts_from_network( $args = null ) { ~’を追加した時と同じように、今度は’function get_blog_all_entry( $~ ) {‘を記事からそっくりそのまま丸ごとコピーして追加するだけです。
現在記事タイトルとリンクが表示されるのでしたら、既に追加済みではないでしょうか?
入れ違いになったようですが、上の返信にswitch_to_blog()について追記してありますので確認して試してください。popupさま
お返事遅くなり申し訳ありません。。。
教えて頂いた内容を反映する際に触らなくてよい箇所を触ってしまい
パニックになっていました。。早速のご教授ありがとうございます。
教えて頂いた内容に変更修正してみると
サムネイル画像が表示され、希望するカタチに完成しました!!!お力添えいただき誠にありがとうございました!!!!
感謝です。
- トピック「マルチサイトの親ページにアイキャッチ画像」には新たに返信することはできません。