ど素人から毛を生やす。<延>

WordPressの「メニュー」でアイキャッチ画像を表示したかった件

Web > WordPress 2015年8月12日(最終更新:1年前)

このページは2015.8.12に作成されています。時代の流れとそぐわない可能性があったり、僕が今以上のど素人だった頃の記事だったりするので、新しい記事を探してみるのも良いかもしれません。

どもです。

WordPressのカスタムメニューを使う際、
まずはfunctions.phpに、

register_nav_menu('メニュー名(スラッグ)', '管理画面上のメニューの表示名');

を入力した上、メニューを表示したい場所に、

<?php
wp_nav_menu( array(
'theme_location'=>'global_nav',
'container'     =>'',
'menu_class'    =>'',
'depth'    =>'1',
'items_wrap'    =>'%3$s'));
?>

といった感じで入力すれば勝手にメニューが出てきてくれるわけですが(wp_nav_menuの書き方は他のサイト様を見て頂くとして)。

メニューに固定ページを登録したとき、そのページのアイキャッチ画像を表示させたかったのです。
が、wp_nav_menuではアイキャッチの表示はできないようです。

これについて、有限会社Willさんいん様のスタッフブログに良い感じの答えがありました。

が、wp_get_nav_menu_itemsで何故かメニューのコンテンツが取得できない!
どうやら引数がスラッグだとダメで、IDだと取得できるっぽい。
関数のヘルプを見た限りではスラッグで大丈夫そうなのですが…。

とにかく、メニューのIDをスラッグから取得すれば良いということですね!

というわけでポン(・∀・)↓

<?php
   $menu_name = 'メニュー名(スラッグ)';
   $locations = get_nav_menu_locations();
   $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
   $menu_items = wp_get_nav_menu_items($menu->term_id);
   if($menu_items):
?>
<ul>
<?php 
  foreach ($menu_items as $menu): 
  $page_id = $menu->object_id;
  $thumbnail_id = get_post_thumbnail_id($page_id);
  $image_attributes = wp_get_attachment_image_src($thumbnail_id); 
  $content = get_page($page_id);
?>
	<li>
		<div class="title"><?php echo $content->post_title; ?></div>
		<img src="<?php echo $image_attributes[0]; ?>" alt="" width="<?php echo $image_attributes[1]; ?>" height="<?php echo $image_attributes[2]; ?>" />
		<a href="<?php echo get_permalink($page_id); ?>">詳しくはこちら</a>
	</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>

ちな、このコードはフロントページに使いました。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった  (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)