ショートコードで簡単解決!WordPress固定ページにカテゴリ一覧を編集する方法
2016/03/26
プラグインなしでカテゴリ一覧を作成
ショートコードでカテゴリ一覧を作成
WordPressをブログとして使う分には関数を作って、ショートコードを作成して、といったことが発生する機会はほぼないワケですが、ブログじゃない見せ方のサイトを作ろうかなぁと思った時にはショートコードは非常に強い味方となってくれる仕組みなのです。
というわけで、今回は、ショートコードを利用して、固定ページや特定の投稿に特定のカテゴリの投稿一覧を作成する処理を作ってみましたので、解説しようと思います。
ショートコードの記載の方法については、「WordPress投稿にPHPを記述するショートコードの使い方add_shortcode」に記事を書いていますので、参考にしてみてください。
また、上記の記事内でショートコードをテンプレート内で実装する方法も記載しています。
一度ショートコードを作っておけば、記事内だけではなくてテンプレート内でも使えますので、覚えておいて損はない仕組みですね。
ただ、そのままではウィジェットでは使えませんので、ウィジェットにも編集したいという場合には「WordPressのウィジェットでショートコードを使う方法add_filter」の記事を読んでみてください。
ちょっとした処理を追加することで対応できるようになります。
カテゴリ一覧を編集するソース
対応する内容は、「functions.php」にプログラムを記述し、それを呼び出すショートコードを固定ページや投稿に記述する、という内容になります。
functions.phpに関数を追加
functions.phpに下記のソースを記載します。(2016.03.26 修正)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// ショートコードで呼び出す関数 function Category_List ( $arg = array () ) { extract ( shortcode_atts ( array ( 'category' => '1', 'posts_per_page' => '5' ), $arg ) ); $blog_posts = get_posts ( array ( 'posts_per_page' => $posts_per_page, 'category' => $category )); $html = Create_Html($blog_posts); return $html; } add_shortcode('categorylist', 'Category_List'); // HTMLを生成する関数 function Create_Html ( $blog_posts ) { $html = '<div>'; foreach ( $blog_posts as $post ) { // 投稿日の場合 $html .= '<p>' . date ( 'Y.m.d', strtotime ( $post->post_date ) ) . '</p>'; // 更新日の場合 $html .= '<p>' . date ( 'Y.m.d', strtotime ( $post->post_modified ) ) . '</p>'; $html .= '<p><a href="' . get_permalink($post->ID) . '">' . $post->post_title . '</a></p>'; } $html .= '</div>'; return $html; } |
「functions.phpって何?」っていう方には「WordPressの functions.phpがある場所」という記事を書いていますので、こちらも読んでみてください。
記事に記載するショートコード
実際にカテゴリ一覧を編集する場合には、投稿に下記のソースコードを記載します。
1 |
[categorylist category='2' posts_per_page='5'] |
「category」は、カテゴリの IDになります。表示したいカテゴリを編集します。
「posts_per_page」は、表示する件数を編集します。
この仕組みではページ送りの処理は含まれていませんので、「最新 5件」を表示するといった想定になっています。
また、「posts_per_page => -1」の様に「-1」を指定すると、1ページの表示制限をなくすことができます(全件表示になります)。
カテゴリ一覧を編集するソースの解説
ショートコードの基本的な理解は最初にも書きましたが、「WordPress投稿にPHPを記述するショートコードの使い方add_shortcode」に記載していますので、そちらを読んでください。
ショートコードで、「Category_List」という関数を呼び出します。
引数として、「category」「posts_per_page」を受け取ります。
引数がない場合は、「category => 1(未分類)」、「posts_per_page => 5」(5件表示)がデフォルト値として設定されます。
7行目の「get_posts()」で、引数で受け取ったカテゴリから件数分の記事を取得します。
それを、12行目の「Create_Html関数」に送って HTMLを生成します。
決まりきった HTMLを生成できればいいのならば、「Create_Html関数」は関数化する必要はないのですが、カテゴリごとに編集する HTMLを変えたい場合には、下記のような感じで「Create_Html関数」を分けておく方が便利なんじゃないかな、ということで関数を分けています。
1 2 3 4 5 |
if ( $category == '3' ) { $html = Create_Html3($blog_posts); } else { $html = Create_Html($blog_posts); } |
まぁ、ショートコードの引数に HTMLの区分を追加して、その区分で「Create_Html関数」を振り分けるようにしておく方が使い勝手はよさそうですね。
また、投稿から取得する値として、「タイトル」を「$post->post_title」として取得していますが、同様にいろいろな値が取得可能です。
下記のサイトが参考になりましたので、併せて紹介しておきます。
http://weble.org/2012/04/23/wordpress-post-data
「query_posts」ではなく「get_posts」関数を使おう
最初に参考にしたサイトでは、投稿情報を取得する際に「query_posts」が使われていました。
ですが、下記の様に「query_posts」関数は推奨されていない関数ですので、「get_posts」関数を使いましょう。
http://notnil-creative.com/blog/archives/1688
実際に「query_posts」のままでは想定した動きになりませんでしたからね。
この記事では一覧表示をすることを主眼に解説しましたが、カスタムフィールドも利用した抽出条件、ソート条件を設定する方法を含めた解説記事を「ショートコードで簡単解決!カスタムフィールドでソート、抽出条件設定方法」に書きましたのであわせて参考にしてください。
(2015.05.25 追記)
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
カスタムタクソノミーのターム一覧をウィジェットにショートコードで編集
カスタムタクソノミーに属するターム(カテゴリ)の一覧を wp_list_categories()関数+ショートコードでウィジェットに編集するサンプルプログラムです。
-
-
seesaaからWordPressに引越。インストールなど必要な全てを解説
seesaaブログからWordPressへの引越し解説。他のブログにはないseesaaブログからcanonicalとリダイレクトの設定方法を実装!
-
-
BackWPupでバックアップ・機能の基本設定 Settings
BackWPupその5。バックアップ設定のベースになるBackWPup自体の設定解説です。
-
-
WordPressでダブルクォートなどの文字が自動変換?原因と対処方法
ダブルクォート、シングルクォート、HTMLタグなどが自動変換関数によって入力と違う形で表示されます。原因を2つの関数ごとに説明し、対応方法を3パターン提示します。
-
-
Custom Field Templateで簡単にカスタムフィールドをフル活用
カスタムフィールドを簡単に設定するプラグイン。簡単にカスタムフィールドが管理で来て作業効率が数倍にアップします!
-
-
wp_mail()関数でWordPressのスパム対策済のメールフォーム作成
WordPressでメール送信フォームを作成するための関数「wp_mail()」の使い方の解説。CC、BCC、添付ファイルも HTMLメールも設定可能。
-
-
ショートコードで簡単解決!カスタムフィールドでソート、抽出条件設定方法
ショートコードを使って固定ページや投稿に特定のカテゴリ一覧を編集する処理に、ソート条件、抽出条件も設定できる処理を作成。カスタムフィールドも条件に利用可。
-
-
タクソノミーの一覧をショートコードで編集・ソート機能付き・wp_list_categories
カスタムタクソノミーのターム一覧をショートコードで編集する方法の解説です。Category Order and Taxonomy Terms Orderを利用してソート機能を追加したバージョンです。
-
-
WordPress・Contact Form7、MW WP Form共通 細かなデザイン調整方法
お問い合わせフォームプラグインの Contact Form7、MW WP Formにおけるラジオボタン、チェックボックスなどの見た目を調整する小技を紹介。
-
-
SI CAPTCHA Anti-Spamを使って WordPressのコメントスパム対策をする
コメントスパム対策として入力させない対策の一つとしてCAPTCHAという方法がありそれを簡単に実装できるプラグインSI CAPTCHA Anti-Spamの解説です。
Comment
大変参考にさせて頂いております。
ソースをそのまま使ってみたのですが
投稿した日付けが全て一緒になります。
何か私の設定が間違っているのでしょうか?
あっきーさん、ご連絡ありがとうございます。
ご連絡の件ですが、私が間違えていますね。失礼いたしました。
「get_post_time()」関数は表示しているページの投稿日時を取得しますので、表示している固定ページの投稿日が表示されていると思われます。
22行目を下記の様に書き換えてください。
エス技研様
変更したところ無事表示されました!
ワードプレスを扱い始めたばかりで少しずつ勉強しておりますが
いつも参考にさせて頂いております。
すぐに対応頂き有難う御座いました
あっきーさん、ご連絡ありがとうございます。
無事に対応できたとのことで安心しました。
ご指摘いただいていた箇所の記事は修正させていただきました。
でも、まぁ、このブログにも質問をくださる方も少なからずいらっしゃいますが、お礼まで書き込んでくださる方は限りなく少ないので、対応した甲斐があったと嬉しくなりますね。^^