人気記事を表示記事のカテゴリに合わせてサイドバーに表示、完成!Gush組み込み完了しました。

公開日:  最終更新日:2014/11/10

SiSO-LAB

先日からちょこちょこっとやっている、表示記事のカテゴリに連動して人気記事をサイドバーに表示するカスタマイズですが、無事、Gushの表示イメージへの合わせこみも完了しましたので、ソースコードを公開します。

本記事は、WordPress V3.9.2と無料テーマのGush V1.1.0にて動作確認を行っています。

WordPress Pupular Posts書式調整は無事完了

あまりスタイルシートに詳しくないのに加えて、WordPress Popular Postsの引数の意味合いもよく理解していなかったのでちょっと試行錯誤してしまいました。しかし、無事、Gushへの合わせこみが完了しました。

見てください!こちらがGushの「NEW エントリー」表示です。

カテゴリ別人気記事表示

続いてこちらが今回カスタマイズした「人気記事一覧」です。

カテゴリ別人気記事表示

同じスタイルを使っていますので、かなりそっくり感があるというか、同じになりました。統一感があってとてもいい仕上がりです。

その他の悩んだところ

WordPress Popular Postsから「posted on」は削除できないの?

WordPress Popular Posts、どうも日付を表示させるとどうしても「posted on」が付いてしまうようです。あれこれ調べてみたのですが、プラグインのソースコードをいじるしかなさそう。

ということで、Gushカスタマイズついでにsidebar.phpの方をいじり、Gushの「NEW エントリー」欄に「posted on yyyy.mm.dd」と表示するようにしました。また、なぜか「Word Press Posts」の方では曜日表示が日本語で表示されてしまい、どうにも修正方法がわからなかったので曜日表示を取っちゃいました。

Gushのsidebar.phpの35行目に、以下のソースコードがあります。


<div class="side_title"><?php echo get_post_time('Y.m.d D'); ?><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></div>

これを以下のように変更しました。


<div class="side_title"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>posted on <?php echo get_post_time('Y.m.d'); ?></div>

これで「NEW エントリー」表示をするときにも、日付の前に「posted on」が付加されるようになります。

トップ(ホーム)ページを表示するとカテゴリが狂うの?

大抵のブログはトップページを表示すると新着記事の一覧が表示されます。当ブログも例外ではありませんが、そんな時、「現在記事のカテゴリ」を取得するとどうなるんでしょう?

疑問に思って試しに表示してみたら、最後に表示した新着記事のカテゴリが取得できているようです。と言いますか何といいますか、良く考えてみれば、トップページではカテゴリを無視してザクっと全記事からの人気記事を表示してくれればいいのかな?

すっかり忘れていましたが、2つ前の記事を読み返したら、しっかりと「トップページでは全カテゴリの人気記事リストをサイドバーに表示する。」と、自分で書いていました…。最近、物忘れが激しくて…。

WordPressでサイトのホーム(トップ)ページが表示されているか知る方法

Gushのsildebar.phpを眺めていたら、どうも「NEW エントリー」は個別記事の時にしか表示しないようにしており、「is_home()」という関数で判定しているようです。

調べてみると、これはWordPressの関数で、「サイトのメインページ(ホームページ)が表示されているかどうかを判定」とあります。

これを「if文」内に使用してカテゴリの指定、または無指定を分岐分けしてやればよさそうです。

ということで、参考にさせていただいたソースコードを以下のように変更しました。


  if(is_home()):  // ホーム表示ならカテゴリ指定無し
    $cat = '';
  else:
    $cat = get_the_category();
    $cate_ids = $cat[0]->term_id;
    for($i=1; $i<count($cat); $i++) { // 複数カテゴリに対応
      $cate_ids .= "," . $cat&#91;$i&#93;->term_id;
    }
  endif;

元々「else」の方に書いてあるソースコードだけだったのですが、トップページの場合は「$cat」編集の中身を空にしておくことにしました。

サイドバーにカテゴリー別人気記事を表示するソースコード

ということで、ソースコードは最終的に以下のようなものになりました。これを、「wp-content/themes/gush」内にある「sidebar.php」にコピーすればバッチリです。


<?php
if(function_exists('wpp_get_mostpopular')) {
  global $ex_id; // 重複の記事
  $ex_id = (empty($ex_id)) ? get_the_ID() : $ex_id . "," . get_the_ID(); //現記事のぞく
  if(is_home()):  // ホーム表示ならカテゴリ指定無し
    $cat = '';
  else:
    $cat = get_the_category();
    $cate_ids = $cat&#91;0&#93;->term_id;
    for($i=1; $i<count($cat); $i++) { // 複数カテゴリに対応
      $cate_ids .= "," . $cat&#91;$i&#93;->term_id;
    }
  endif;
  ob_start();

  // オプションの設定
  $args = array(
  'limit' => 10,              // 表示する記事数
  'pid' => $ex_id,            // 表示しない記事ID
  'cat' => $cate_ids,         // カテゴリの指定
  'range' => 'monthly',       // 期間
  'order_by' => 'views',      // ソート順(これは閲覧数)
  'post_type' => 'post',      // 投稿タイプ(カスタム投稿タイプを表示したくない場合など)
  'thumbnail_width' => 100,   // サムネイルの横幅
  'thumbnail_height' => 100,  // サムネイルの高さ
  'stats_comments' => 0,      // コメントを表示する(1)/表示しない(0)
  'stats_views' => 0,         // 閲覧数を表示する(1)/表示しない(0)
  'stats_author' => 0,        // 投稿者を表示する(1)/表示しない(0)
  'stats_date' => 1,          // 日付を表示する(1)/表示しない(0)
  'stats_date_format' => 'Y.m.d',  // 日付のフォーマット
  'stats_category' => 0,      // カテゴリを表示する(1)/表示しない(0)
  'wpp_start' => "
<div class='side_contents'>",  // リストの開始タグ
  'wpp_end' => "</div>

",      // リストの終了タグ
  'post_html' =>              // HTMLの出力フォーマット
    "
<article>
<div class='side_new'>
<div class='side_thumb'>{thumb}</div>
<div class='side_title'><a href='{url}'>{text_title}</a>
        {stats}</div>
</div>
<div class='clear'></div>
</article>

    "
  );

  // 関数の実行
  wpp_get_mostpopular($args);
  $popular = ob_get_clean();
  echo "
<h4>人気記事一覧</h4>

" . $popular;
}
?>

相変わらず「”」周りに変な改行が入ってしまってすいません。きっと有名どころのプラグインを使えば解決するのですが、せっかく自力実装したソースコード表示機能なので、もうちょっとがんばってみようと思います。

 

今日の一言二言三言

 

is_home() 父ちゃん仕事は 早く終わる?

そんな言葉が うれしいこの頃

 

「is_home()」という関数名を見て、SiSO-Jr.達がよく「お父さん、今日は早い?遊べる?」なんて声をかけてくれることを思い出し、ちょっと涙ぐんでいます。どっちかというと人生バタついている方なので、なんか、たまにそういうのを再認識して涙腺ゆるんじゃいます。先日、家族で小さな山を登ってきました。みんな成長してるんだなぁ。父ちゃん、幸せだなぁ。

 

表示記事と同じカテゴリの人気記事をサイドバーへ表示

SiSO-LAB WordPress Popular Postsを使うと簡単に人気記事を表示することができますが、一歩突っ込んだ使い方をして、表示記事と同じカテゴリの人気記事を表示できるようにしてGushに組み込もうとアレコレしています。

まとめ記事

  • このエントリーをはてなブックマークに追加
  • Pocket

関連前後記事

Your Message

メールアドレスが公開されることはありません。


*

PAGE TOP ↑