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

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

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

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

PHP

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

Q&A

解決済

2回答

3947閲覧

wordpressでSidebarのカスタマイズをどのプログラムでやればいいのかわからない

yukiko

総合スコア41

WordPress

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

PHP

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

0グッド

1クリップ

投稿2017/12/14 02:52

###前提・実現したいこと
habakiriというテーマを使ってカスタマイズしています。サイドバーをいじりたいのですが、どのプログラムをいじればいいのかわかりません。
サイドバーに表示するものは、投稿データの一覧(タイトルと投稿日付)ですが、これは「外観」の「ウィジェット」で設定しています。
例えば、この投稿日付の表示が、そのままだと「2017年12月14日」と出ますが、これを「(2017/12/14)」にしたいのです。
通常であればsidebar.phpになるかと思いますが、いろいろ部品化されていて、どこをいじればいいのか…。

###該当のソースコード・sidebar.php

php

1<aside id="sub"> 2 <?php 3 do_action( 'habakiri_before_sidebar_widget_area' ); 4 if ( is_active_sidebar( 'sidebar' ) ) { 5 echo '<div class="sidebar">'; 6 dynamic_sidebar( 'sidebar' ); 7 echo '</div>'; 8 } 9 do_action( 'habakiri_after_sidebar_widget_area' ); 10 ?> 11<!-- #sub --></aside>

上記のdynamic_sidebar( 'sidebar' );が、サイドバーで投稿一覧を表示する箇所だと思いますが、この行の意味が理解できていません。
関数リファレンスには下記のようにあるのですが、ここを読んでも、結局どのソースをいじればいいのか…。
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/dynamic_sidebar

サイドバーの投稿一覧表示付近に吐き出されているクラス名等で、Habakiriのフォルダ内をgrep検索しても、手がかりを見つけられず苦戦しています。

どこかにウィジェットで設定したもののループを書いているプログラムがあると思うのですが…。

ヒントなどピンとくるところがありましたら、ご教授ください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/12/14 03:18

> 投稿データの一覧(タイトルと投稿日付)ですが、これは「外観」の「ウィジェット」で設定しています。 どのウィジェットですか?"最近の投稿"ですか?
yukiko

2017/12/14 03:45

はい。「最近の投稿」です。
guest

回答2

0

ベストアンサー

こんな感じでしょうか
テーマの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 = '最近の投稿 (Y/m/d)' ); 4 } 5 public function widget( $args, $instance ) { 6 if ( ! isset( $args['widget_id'] ) ) { 7 $args['widget_id'] = $this->id; 8 } 9 $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts' ); 10 $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); 11 $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5; 12 if ( ! $number ) { 13 $number = 5; 14 } 15 $show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false; 16 $r = new WP_Query( apply_filters( 'widget_posts_args', array( 17 'posts_per_page' => $number, 18 'no_found_rows' => true, 19 'post_status' => 'publish', 20 'ignore_sticky_posts' => true, 21 ), $instance ) ); 22 if ( ! $r->have_posts() ) { 23 return; 24 } 25 echo $args['before_widget']; 26 if ( $title ) { 27 echo $args['before_title'] . $title . $args['after_title']; 28 } 29 echo '<ul>'; 30 foreach ( $r->posts as $recent_post ) { 31 $post_title = get_the_title( $recent_post->ID ); 32 $title = ( ! empty( $post_title ) ) ? $post_title : __( '(no title)' ); 33 echo '<li>'; 34 echo '<a href="',the_permalink( $recent_post->ID ),'">',$title,'</a>'; 35 $format = '(Y/m/d)'; 36 echo '<span class="post-date">',get_the_date( $format, $recent_post->ID ),'</span>'; 37 echo '<li>'; 38 } 39 echo '</ul>'; 40 echo $args['after_widget']; 41 } 42} 43add_action( 'widgets_init', create_function( '', 'return register_widget( "My_Widget_Recent_Posts" );' ) );

ウィジェットの編集画面に"最近の投稿(Y/m/d)"というウィジェットが追加されていたらOK
コピペ&殴り書きなのでおかしいところがあれば言ってください。

投稿2017/12/14 04:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yukiko

2017/12/14 04:53

な、な、な、なんですかこれは!(←感動しています)。 コピペして動かしたところ、ちゃんと表示されました。 自分で作ったHTML5+CSS3のページを、WORDPRESSのテーマ化することについては、書籍を見ながらやったことがあるのですが、そのやり方だと、サイドバーはsidebar.phpでごりごり作る…という方法だったので、このようにウィジェットからどうこうするというのはやったことがありませんでした。 今、「WP_Widget_Recent_Posts」をcodexで見ているのですが…わからないですね;;。概要はわかっても、aozukiさんが書かれたようなカスタマイズの仕方は、このページでは…>< https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_widget#.E6.9C.80.E8.BF.91.E3.81.AE.E6.8A.95.E7.A8.BF.E3.83.BB.E3.82.A6.E3.82.A3.E3.82.B8.E3.82.A7.E3.83.83.E3.83.88 コピペでは、少し違ったことをしようとすると、またひっかかってしまうので、書いていただいたコードで意味がわからないところを地道にググってみたいと思います。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2017/12/14 04:57

本当はフィルターフックでウィジェットが表示される前に中身を置換してあげるというのが一般的なのですが(カテゴリーウィジェットなどはそうします)、最新の投稿だけはフックできないので新しいウィジェットを複製してカスタマイズするという方法になります。
退会済みユーザー

退会済みユーザー

2017/12/14 05:01

> 投稿タイトルと日付のあいだに<br>を入れたいとか も、`$format = '(Y/m/d)';`の一行上に`echo '<br>';を挿入すれば対応できます。
yukiko

2017/12/14 05:04

Habakiriはフィルターフックとかアクションフック…なるものがいっぱい準備されていて便利と書いてあるのですが、その使い方も概念も、何が便利なのかもわかっておらず、そこを勉強しないとダメだなあと思いながら、あとまわしになっています。 今も、メタ情報の「公開済み」という文字列を「公開日」に変えるのに、ネットで拾ったソース(add_filterとか書いてあります)でやってみているのですが、str_replaceがどうもうまくいっていないっぽいです;;。 フックとやらを勉強しないと、柔軟なカスタマイズができないのですね。 がんばりますm(_ _)m。
guest

0

日付のフォーマットは管理画面から変更できるのではないでしょうか。

https://wpdocs.osdn.jp/%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2/%E4%B8%80%E8%88%AC%E8%A8%AD%E5%AE%9A

投稿2017/12/14 03:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yukiko

2017/12/14 03:48

ご回答ありがとうございます。 日付のフォーマット、全体を変えても良ければOKなんですが、サイドバーのみ異なるフォーマットで、かつ、日付にカッコが付いている…という編集をしたい場合です。 ほかにも例えば、投稿タイトルと日付のあいだに<br>を入れたいとか(現在は入っていません)。 あと、カテゴリ名を表示したいとか(今はありません)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問