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

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

ただいまの
回答率

91.28%

  • PHP

    15631questions

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

  • WordPress

    4981questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 76

yukiko

score 29

前提・実現したいこと

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

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

<aside id="sub">
    <?php
    do_action( 'habakiri_before_sidebar_widget_area' );
    if ( is_active_sidebar( 'sidebar' ) ) {
        echo '<div class="sidebar">';
        dynamic_sidebar( 'sidebar' );
        echo '</div>';
    }
    do_action( 'habakiri_after_sidebar_widget_area' );
    ?>
<!-- #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検索しても、手がかりを見つけられず苦戦しています。

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • aozuki

    2017/12/14 12:18

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

    キャンセル

  • yukiko

    2017/12/14 12:45

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

    キャンセル

回答 2

checkベストアンサー

+3

こんな感じでしょうか
テーマのfunctions.phpの一番最後に追記してください。

class My_Widget_Recent_Posts extends WP_Widget_Recent_Posts {
    function My_Widget_Recent_Posts() {
        parent::WP_Widget( false, $name = '最近の投稿 (Y/m/d)' );
    }
    public function widget( $args, $instance ) {
        if ( ! isset( $args['widget_id'] ) ) {
            $args['widget_id'] = $this->id;
        }
        $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts' );
        $title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
        $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5;
        if ( ! $number ) {
            $number = 5;
        }
        $show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false;
        $r = new WP_Query( apply_filters( 'widget_posts_args', array(
            'posts_per_page'      => $number,
            'no_found_rows'       => true,
            'post_status'         => 'publish',
            'ignore_sticky_posts' => true,
        ), $instance ) );
        if ( ! $r->have_posts() ) {
            return;
        }
        echo $args['before_widget'];
        if ( $title ) {
            echo $args['before_title'] . $title . $args['after_title'];
        }
        echo '<ul>';
        foreach ( $r->posts as $recent_post ) {
            $post_title = get_the_title( $recent_post->ID );
            $title      = ( ! empty( $post_title ) ) ? $post_title : __( '(no title)' );
            echo '<li>';
            echo '<a href="',the_permalink( $recent_post->ID ),'">',$title,'</a>';
            $format = '(Y/m/d)';
            echo '<span class="post-date">',get_the_date( $format, $recent_post->ID ),'</span>';
            echo '<li>';
        }
        echo '</ul>';
        echo $args['after_widget'];
    }
}
add_action( 'widgets_init', create_function( '', 'return register_widget( "My_Widget_Recent_Posts" );' ) );


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/14 13: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 13:57

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

    キャンセル

  • 2017/12/14 14:01

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

    キャンセル

  • 2017/12/14 14:04

    Habakiriはフィルターフックとかアクションフック…なるものがいっぱい準備されていて便利と書いてあるのですが、その使い方も概念も、何が便利なのかもわかっておらず、そこを勉強しないとダメだなあと思いながら、あとまわしになっています。

    今も、メタ情報の「公開済み」という文字列を「公開日」に変えるのに、ネットで拾ったソース(add_filterとか書いてあります)でやってみているのですが、str_replaceがどうもうまくいっていないっぽいです;;。
    フックとやらを勉強しないと、柔軟なカスタマイズができないのですね。
    がんばりますm(_ _)m。

    キャンセル

+2

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

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 12:48

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

    キャンセル

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

ただいまの回答率

91.28%

関連した質問

同じタグがついた質問を見る

  • PHP

    15631questions

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

  • WordPress

    4981questions

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