質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

675閲覧

wordpressの投稿ページ 「最新の投稿」ウィジェットに タグ情報を表示したいです。

minemu-rar

総合スコア12

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/04/06 06:49

前提・実現したいこと

wordpressの投稿ページのサイドバーに表示される
「最新の投稿」ウィジェットに
タグ情報を表示したいです。

発生している問題

$recent_postからタグ情報が取得できないかと思っていたのですが
現在のsingle.phpのループ内のタグを取得してしまいます。

該当のソースコード

/wp-includes/widgets/class-wp-widget-recent-posts.php

<ul> <?php foreach ( $r->posts as $recent_post ) : ?> <?php $post_tags = get_the_tags($recent_post->ID); $post_title = get_the_title( $recent_post->ID ); $title = ( ! empty( $post_title ) ) ? $post_title : __( '(no title)' ); ?> <li> <a href="<?php the_permalink( $recent_post->ID ); ?>"><?php echo $title ; ?></a> <?php if( get_the_tags($post_tags) ){ echo '<br><span class="post-tags">'; the_tags(); echo '</span>'; } ?> <?php if ( $show_date ) : ?> <span class="post-date"><?php echo get_the_date( '', $recent_post->ID ); ?></span> <?php endif; ?> </li> <?php endforeach; ?> </ul>

試したこと

<ul> <?php foreach ( $r->posts as $recent_post ) : ?> <?php $post_tags = get_the_tags($recent_post->ID); $post_title = get_the_title( $recent_post->ID ); $title = ( ! empty( $post_title ) ) ? $post_title : __( '(no title)' ); ?> <li> <a href="<?php the_permalink( $recent_post->ID ); ?>"><?php echo $title ; ?></a>     <!--ここから--> <?php if( get_the_tags($post_tags) ){ echo '<br><span class="post-tags">'; the_tags(); echo '</span>'; } ?>     <!--//ここまで--> <?php if ( $show_date ) : ?> <span class="post-date"><?php echo get_the_date( '', $recent_post->ID ); ?></span> <?php endif; ?> </li> <?php endforeach; ?> </ul>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

the_tags();で現在の投稿のタグを出力しているからです。
get_the_tags();で取ってきたタグをforeachで処理しましょう

例:

PHP

1$tags = get_the_tags($recent_post->ID); 2foreach ($tags as $tag) { 3 echo $tag->name; 4}

参考:テンプレートタグ/get the tags - WordPress Codex 日本語版


また、コアファイルは編集してもWPのアップデートで元に戻ってしまうので、テーマのfunctions.phpでカスタマイズするのが基本です

しかし、最新の投稿ウィジェットは他のウィジェットと違いフィルターフックできないので、元の最新の投稿を出力するクラスを継承する形で新しく定義してやります。

こんな感じ

PHP

1class My_Widget_Recent_Posts extends WP_Widget_Recent_Posts { 2 function My_Widget_Recent_Posts() { 3 parent::WP_Widget( false, $name = '最近の投稿 (タグつき)' ); 4 } 5 public function widget( $args, $instance ) { 6 if ( ! isset( $args['widget_id'] ) ) { 7 $args['widget_id'] = $this->id; 8 } 9 10 $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts' ); 11 12 /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ 13 $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); 14 15 $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5; 16 if ( ! $number ) { 17 $number = 5; 18 } 19 $show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false; 20 21 /** 22 * Filters the arguments for the Recent Posts widget. 23 * 24 * @since 3.4.0 25 * @since 4.9.0 Added the `$instance` parameter. 26 * 27 * @see WP_Query::get_posts() 28 * 29 * @param array $args An array of arguments used to retrieve the recent posts. 30 * @param array $instance Array of settings for the current widget. 31 */ 32 $r = new WP_Query( apply_filters( 'widget_posts_args', array( 33 'posts_per_page' => $number, 34 'no_found_rows' => true, 35 'post_status' => 'publish', 36 'ignore_sticky_posts' => true, 37 ), $instance ) ); 38 39 if ( ! $r->have_posts() ) { 40 return; 41 } 42 ?> 43 <?php echo $args['before_widget']; ?> 44 <?php 45 if ( $title ) { 46 echo $args['before_title'] . $title . $args['after_title']; 47 } 48 ?> 49 <ul> 50 <?php foreach ( $r->posts as $recent_post ) : ?> 51 <?php 52 $post_title = get_the_title( $recent_post->ID ); 53 $title = ( ! empty( $post_title ) ) ? $post_title : __( '(no title)' ); 54 ?> 55 <li> 56 <a href="<?php the_permalink( $recent_post->ID ); ?>"><?php echo $title ; ?></a> 57 <?php if ( $show_date ) : ?> 58 <span class="post-date"><?php echo get_the_date( '', $recent_post->ID ); ?></span> 59 <?php endif; ?> 60 </li> 61 <?php endforeach; ?> 62 </ul> 63 <?php 64 echo $args['after_widget']; 65 } 66} 67add_action( 'widgets_init', create_function( '', 'return register_widget( "My_Widget_Recent_Posts" );' ) );

これをfunctions.phpにごそっと貼り付けて、あとはカスタマイズをご自由に

投稿2018/04/06 07:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minemu-rar

2018/04/06 07:52

ご回答、ありがとうございました! 早速、おっしゃるものを入力したところ思っていたことが実現できました。 またWPについての基本的なところについても大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問