特定カテゴリの記事をホームの新着記事一覧に表示させず、別枠のウィジェットに表示する方法


のブログでは、自分が本来書きたい記事に加え、ニュース記事のお知らせも更新しています。そのためニュース記事が多くなると、本当に読んでもらいたい記事が埋もれてしまうのが気にかかっていました。

それで、【ニュース】カテゴリの新着記事はメインインデックスに表示させず、変わりにサイドバーのウィジェット内に、表示することにしました。つまりWordPressのブログを2つに分割するわけです。

これには2つの手順が必要になります。使うプラグインはAdvanced Category Excluder Exec-PHP です。

スポンサーリンク

このブログでは、タイトルへのリンクを抜粋内に含めているため、以下のようなウィジェットになっています。もちろん、記事タイトルを上に持ってくることも可能です。

image

1.特定カテゴリの記事をホーム画面に表示しない

これには非常に便利なプラグインAdvanced Category Excluder を用います。Advanced Category Excluder は、指定したカテゴリの記事をメインインデックスに表示させなかったり、RSSとして飛ばさないよう指定したりできるプラグインです。

詳しい使い方は以下のサイトを参考にさせていただきました。ありがとうございます。

新着一覧に特定のカテゴリ記事を表示しない方法 – Advanced Category Excluderの使い方 | WordPressのプラグイン | WP SEOブログ

image

Advanced Category Excluder をインストールすると、右図のように、ダッシュボードにACEの項目が現れます。

この中から、Categoriesを選択します。

すると、下図のように、各項目ごとに、除外するカテゴリを指定する画面になります。

わたしのブログでは、【パソコン】カテゴリの記事はHomeのメインインデックスに表示されないようにしています。【パソコン】は親カテゴリなので、パソコン関係のあらゆる記事が除かれます。

image

また、“WordPress”カテゴリの記事はRSSに投稿されないようにしています。、“WordPress”は子カテゴリなので、同じ【パソコン】に属する記事のうち、別の子カテゴリの記事、例えば“Evernote”の記事はRSSが出力されます。

今回は、【ニュース】カテゴリの記事もHomeのメインインデックスから除くことにしました。

 

このAdvanced Category Excluder はさまざまな使い方ができる非常に優れたプラグインです。

2.特定カテゴリの記事を別枠のウィジェットに表示する

これで【ニュース】カテゴリの記事はメインインデックスに表示されなくなったわけですが、せっかく書いた記事なので、別枠で新着記事を一覧表示したいところです。

プラグインCategory Posts Widgetを試す

まず目をつけたのは次のエントリでした。

サイドバーを思いのままに 「Category Posts Widget」 | WordPress なら最高!

まさにわたしのしたいことが書かれていました。同じように考えた方がいらっしゃるのは嬉しいことです。この記事では、Category Posts Widgetというプラグインを用いて、特定カテゴリの新着記事をウィジェットで表示しています。

ところが…

わたしのブログでは、Category Posts WidgetAdvanced Category Excluder とかちあってしまうことが判明しました。ACEによってHome画面から除外した【ニュース】カテゴリの記事は、同じHome画面に置いているCategory Posts Widgetで表示できなかったのです。

Category Posts Widgetは唯一無二のウィジェットなだけに残念です。WordPress(ワードプレス) なら最高!さんでは、特定カテゴリの記事を表示しないために、ACE意外の方法を取っているのでしょう。

そのため、別の方法を考えました。ただのテキストウィジェットをカスタマイズするというシンプルな方法です。

プラグインExec-PHP を駆使する

まず、プラグインExec-PHP をインストールします。Exec-PHP はテキストウィジェットにもPHPを記述できるようにする驚くべきプラグインです。

有効化した後、使用するためには、ダッシュボード「設定」→「Exec-PHP」と、「ユーザー」→「あなたのプロフィール」にある2つのチェックボックスを確認する必要があります。その作業については、以下のエントリを参考にさせていただきました。

Exec-PHP | 投稿記事内等で PHP を実行させるWordPressプラグイン

 ダッシュボードの「外観」→「ウィジェット」からテキストウィジェットを設定します。テキストとして以下の内容を記述します


<?php
$posts = get_posts('numberposts=&category=');
global $post;
?>
<?php
if($posts): foreach($posts as $post): setup_postdata($post); ?>
<a href="<?php the_permalink();?>"><?php the_title();?></a><br />
<?php  the_excerpt() ;
?>

<?php endforeach; endif;
?>


まず には表示する新着記事の数を表記します。このブログでは 10 です。

次にには表示したいカテゴリのナンバーを表記します。ナンバーはダッシュボードの「投稿」→「カテゴリ」で、目的のカテゴリにマウスのカーソルを合わせると、下図のように確認できますScreenClip

<a href="<?php the_permalink();?>"><?php the_title();?></a>は、記事のタイトルのリンクを出力するコードです。

<?php the_excerpt() ; ?>は記事の抜粋を出力するテンプレートタグです。カスタマイズする場合は以下のサイトが参考になると思いました。

WordPressのthe_excerpt()をカスタマイズする: 小粋空間

 the_excerpt()の代わりにthe_content()を使えば、抜粋ではなく記事の本文そのものをウィジェット内に出力することもできます。そうすれば、あたかもHome画面をカテゴリ別に分割したようなレイアウトにすることも可能です。

新着記事にNew!を表示する場合は、<?php the_excerpt() ; ?>の直前に以下を記述します。にはNew!を表示する日数を半角数字で記入します。


<?php
$days = ;
$today = date_i18n('U');
$entry = get_the_time('U');
$kiji = date('U',($today - $entry)) / 86400 ;
if( $days > $kiji ){
echo '<font color="#ff0000"><strong>New!</strong></font>';
}
?>


この点は、以下のエントリを参考にさせていただきました。

WordPressでNew!を表示するパターン別4つの方法 | WordPress(ワードプレス)コミュニティ

 あとは、完成したウィジェットを好きなエリアに置くだけです。この場合は、ACEによるカテゴリ除外とかちあうこともありませんでした。

スポンサーリンク

スポンサーリンク
WordPress