ワードプレスのカスタム投稿の作成とその検索

Webサイト制作
サイト制作
ワードプレス
2019.11.29
2020.10.22
ワードプレスのカスタム投稿の作成とその検索

 

WordPressには「投稿」と「固定ページ」の2種類の投稿タイプが用意されています。
例えば企業のWebサイトをWordPressで制作する場合なら「新着情報は『投稿』、会社概要や事業紹介は『固定ページ』で作成する」という使い分けをします。
しかしWebサイトに載せる情報を充実させていくにつれ、「事業所ごとの詳細な情報を『投稿』で載せたい。でも既存の投稿とは別で管理したいし、投稿一覧にも載せたくない。事業所だけの一覧がほしい」というように、「投稿」と「固定ページ」以外の投稿タイプが欲しくなる場合もあります。
カスタム投稿とは、このような場合に便利な「複数の投稿タイプを持てるようにする」機能です。
この記事ではプラグインを使わずにカスタム投稿を実装する方法と、その有用性について紹介していきます。

カスタム投稿とは

カスタム投稿とは、WordPressで最初から用意されている「投稿」「固定ページ」とは別に、ユーザーが独自に新しい投稿タイプを作って運用することができる機能です。

投稿タイプは複数作成することができます。

たとえばカスタム投稿を実装し、「事業所情報」という新しい投稿タイプを作ったとしましょう。

するとダッシュボードのメニューバーに「投稿」「固定ページ」とは別に「事業所情報」というメニューが表示され、通常の投稿ページと同じように記事の作成ができるようになります。

通常の「投稿」「固定ページ」とは別に記事を管理できるため、Webサイトの運営者側としては有難い機能ですよね。

またカスタム投稿タイプごとに投稿一覧を表示したり、他の投稿とは別の外観テンプレートを適用したりもできるため、閲覧者側も情報が探しやすく、分かりやすくなります。

使い慣れたWordPressの機能や操作性はそのままで、Webサイトの情報を充実させていけるカスタム投稿は大変便利です。

この機能を利用するには、

  • プラグインを導入する
  • 自分で実装する

 

この2つの方法があります。

WordPressにはたくさんのプラグイン存在していますが、これらは元々あるユーザーが作ったものを、別のユーザーが使えるようにと公開されたものです。

ですからプラグインで出来ることは、自分でカスタマイズして作ることが出来るのです。

 

カスタム投稿の設定方法

今回は、カスタム投稿機能をプラグインを使わずに自分で実装する方法を解説していきます。

紹介する手順の通り行えばカスタム投稿機能を実装することはできますが、以下について理解していることが望ましいです。

  • PHPの基礎知識
  • WordPressの関数についての知識
  • WordPressのテーマ編集についての知識

 

また手順を実践していく前にバックアップを取っておくのを忘れずに行ってください。もし間違って編集してしまい、元からあった機能が正しく動作しなくなってしまった場合でもバックアップから復元できます。

function.phpを編集する

WordPressのダッシュボードにアクセスし、メニューから「外観」→「テーマ編集」にアクセスします。

function.phpの編集画面を開いたら、以下のコードを任意の場所に入力します。

add_action( 'init', 'create_post_type' );
function create_post_type() {
  register_post_type( 'カスタム投稿タイプの識別子を決めてアルファベットで入力',
    array(
      'label' => __( 'カスタム投稿タイプ名を入力' ), 
      'public' => true, 
      'has_archive' => true, 
    )
  );
}

このコードを入力して更新すると、メニューバーにカスタム投稿タイプ名が表示されます。

配列で渡している各要素の意味は次の通りです。

  • label:メニューなどに表示されるカスタム投稿タイプ名。日本語が利用できる。
  • public:管理画面から投稿・編集できるようにするため「true」とする。
  • has_archive:カスタム投稿タイプに対する記事一覧ページが必要な場合は「true」とする。

 

この他にも設定できる要素が存在しています。

必要な場合はWordPress公式の関数リファレンスをご覧ください。

またカスタム投稿タイプの識別子(function.phpを編集した際に「register_post_type」の第一引数として与えた文字列)として、以下の文字列は使用できません。

WordPressに最初から実装されている「投稿」や「固定ページ」の識別子として既に使用されていたり、今後使用される予定があるためです。

  • post:投稿
  • page:固定ページ
  • revision:リビジョン
  • attachment:メディア
  • nav_menu_item:ナビゲーションメニュー
  • 「wp_」で始まる文字列:今後WordPressコア開発にて使用される可能性がある投稿タイプ名

 

これらを使用しないよう、識別子を決める際には注意しましょう。

記事の作成・表示

カスタム投稿タイプに関する記事を作成してみましょう。WordPressのダッシュボードにアクセスし、メニューから、先ほど追加したカスタム投稿タイプ名→「新規追加」にアクセスします。

通常の投稿や固定ページの編集画面と同じような画面が表示されました。

カスタム投稿タイプの記事作成・編集も、これまでの投稿タイプを同じように扱うことができます。

何かひとつ記事を作成して公開しましょう。

ダッシュボードから公開した記事を表示すると、いつも利用している「投稿」と同じ外観で、カスタム投稿タイプの記事が表示されます。

ですが「カスタム投稿は、通常の投稿と見た目を変えたいのに……」という事もあるでしょう。

テンプレートに新しいファイルを追加すれば、「投稿」とは異なる外観でカスタム投稿タイプ記事を表示させることも可能です。

「single-カスタム投稿タイプの識別子.php」というファイルを新たに作成すると、これがカスタム投稿タイプ専用のテンプレートとして扱われ、WordPressが自動で切り替えてくれます。

記事の内容に合わせて見た目も変えたいという場合は、テンプレートファイルを追加してください。

一覧の表示

カスタム投稿タイプの記事一覧は、以下のURLで表示できます。

http://example.com/sample/

※「example.com」部分はご自分のWebサイトのドメイン、「sample」部分をカスタム投稿タイプの識別子に置き換えてください。

このURLにアクセスすると、普段の投稿一覧と同じように、カスタム投稿タイプの記事一覧が表示されます。

一覧も記事と同様に、カスタム投稿タイプ専用の外観を設定することが可能です。

テンプレートに「archive-カスタム投稿タイプの識別子.php」を追加すると、そのカスタム投稿タイプ専用の投稿一覧テンプレートとして利用できます。

 

カスタム投稿の検索

特定のカスタム投稿タイプ中の投稿だけを検索させる方法をご紹介します。

前述の通りPHPやWordPressのカスタマイズに関する知識が必要です。

検索フォームの設置

検索フォームを設置したい場所に、以下のコードを書きます。

<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/">
    <input type="text" value="<?php the_search_query(); ?>" name="s" id="s" />
    <input type="hidden" name="post_type" value="カスタム投稿タイプの識別子" />
    <input type="submit" id="searchsubmit" value="Search" />
</form>

3行目のvalue値にカスタム投稿タイプの識別子を設定します。

このように記述することで「このカスタム投稿タイプの中から絞り込む」という検索条件が加わります。

「事業所情報」というカスタム投稿タイプを例としましょう。

「事業所情報の全投稿から『東京』というワードを含むものを検索する」ということが、このフォームを使うことで可能になるのです。

検索結果一覧のカスタマイズ

カスタム投稿タイプ別投稿一覧などと同様に、カスタム投稿タイプ別検索結果についても外観を設定することが可能です。

WordPressでは、検索結果一覧を表示する際に使う外観テンプレートを「search.phpというファイルがあればこれを使う。なければindex.phpを使う」というように決めています。

カスタム投稿タイプ別で検索を行った場合も同じ優先順位です。

つまり、通常の投稿を検索した際の結果一覧と同じテンプレートが使われることになります。

ですが「通常の投稿とカスタム投稿タイプとで記事一覧の外観を分けたのだから、検索結果も別々の外観を使いたい」という事もあるのではないでしょうか。

次はその手順をご紹介します。

テンプレートファイルを作る

まずは検索結果を表示する際に使うテンプレートファイルを作成して保存しましょう。

検索結果一覧については、先に紹介した記事や投稿一覧とは異なり、テンプレートファイルの名前のつけ方が決まっていません。自分で名前を決めて作る『カスタムテンプレート』となります。

今回は、今後の保守のしやすさを重視して「search-カスタム投稿タイプの識別子.php」という名前をつけることにします。

function.phpを編集する

テンプレートファイルの作成が終わったら、function.phpに以下のコードを追記します。

add_filter('template_include','custom_search_template');
function custom_search_template($template){
  if ( is_search() ){
    $post_types = get_query_var('post_type');
    foreach ( (array) $post_types as $post_type )
      $templates[] = "search-{$post_type}.php";
    $templates[] = 'search.php';
    $template = get_query_template('search',$templates);
  }
  return $template;
}

6行目で、専用のテンプレートを使って表示するという命令を与えています。

{$post_type}はプログラム上でカスタム投稿タイプの識別子に変換されるため、複数のカスタム投稿タイプがあり、それぞれにテンプレートを用意する場合であっても、このコードだけでWordPressが自動で振り分けをしてくれるのですね。

 

メリットとデメリット

これまで「カスタム投稿機能を自分で実装する方法」についてご紹介しましたが、読んでいてどのように感じたでしょうか?

「簡単そうだな」と思う方もいれば「難しそう、よくわからない」と感じた方もいらっしゃるでしょう。

これまで紹介した手順で実装する場合、プラグインを使って実装するのに比べてどのような違いがあるかをご紹介します。

メリット

  • プラグインにより不要な機能以外も実装されてしまうことを回避できる
  • プラグインの入れすぎによりサイトが重くなることを回避できる
  • プラグインは併用できないものがあるため、将来別のところで躓いたり、今まで使えていた機能が動かなくなったりすることを回避できる
  • 自分が好きなように作ることができ、不要な機能が入らず分かりやすい

 

自分で実装する場合は、プラグインを使う場合と比べてシンプルになるという利点があります。

プラグインは他人が作っている分、不透明な部分が多いのですよね。

作成者が海外の方の場合は、説明文の日本語訳がおかしな事になっていて混乱することもあります。

プラグインの設定方法については多くのブログで解説されていますが、できれば分かりやすくシンプルに、自分でも理解しながら設定したいところですよね。

管理していく上での分かりやすさやシンプルさを求めるのであれば、自分で実装するのも良いでしょう。

デメリット

  • PHPの知識が必要
  • WordPressの関数について理解が必要

 

自力で実装する場合は、PHPというプログラミング言語の知識が必要になってきます。

「プログラミングなんてやったことないよ」という方にとっては、ここが最大の壁となります。

元々WordPressはPHPで作られているCMSです。

Web制作の知識がなくても本格的なWebサイトを作ることができるのがWordPressの利点のひとつではありますが、より便利にカスタマイズして使うのであればWeb制作の知識があるほうが圧倒的に有利です。

ご紹介した通り、カスタム投稿機能の追加はとても簡単な部類のカスタマイズですから、元からPHPの知識がある方は挑戦するのも良いでしょう。

逆にプログラミングの知識がまったくないのであれば、プラグインで簡単に実装する方が確実で楽な方法と言えるでしょう。

 

まとめ

カスタム投稿は、プラグインを使って実装するだけでなく自作も出来ることが分かりましたね。

しかしプラグインを使わずに自作する場合、PHPとWordPressの知識が必要です。

プログラミングが分かる個人で運用しているWebサイトなどであれば問題はないでしょうけれど、プログラミング経験者が社内に数人しかいない場合などは、今後の事も考えてプラグインで実装するほうが安心ですね。

カスタム投稿機能を使えば、本格的なWebサイトをより便利に管理していくことが可能です。

通常の「投稿」以外の投稿タイプを作りたいと考えた時は、是非実装してみてください。

 

SEOやWEB制作に関する情報を検索

コラム

ピックアップコラム

最新コラム

人気コラム

過去の記事

ご質問やご相談などお気軽にお問い合わせください。

お電話でのお問い合わせはこちら

03-5829-9912

受付時間:平日10:00~19:00(土・日・祝日を除く)