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

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

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

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)
  • (・∀・) 参考になった (1)