WordPressでカスタム投稿タイプをプラグインなしで作成する-コピペで簡単


 

カスタム投稿とは?

ワードプレス規定の「投稿」や「固定ページ」とは別に、投稿タイプをカスタマイズし、作成する事が出来ます。

通常の投稿とは別の目的になる記事を分類する事ができ、自由に投稿タイプを使えるので、例えば、「商品紹介」、「会員プロフィール」、「更新情報」などブログ運営に必要だけど、通常の投稿記事とは別のものなどを区別するのに便利です。

 

実装するには?

2通りの方法があります。

  • プラグインを利用する
  • 直接PHPに追記する

 

プラグインを使うほどの事もない、ちょっとしたカスタマイズで可能です。今回はテーマのファイルを直接編集する方法で、プラグインなしに行います。

 

カスタム投稿タイプを1つか2つ使うくらいなら、プラグインなしでいいと思いますが、大量に使いたい場合は、プラグインの利用をお勧めします。

 

ちなみにプラグインで有名なのは「Custom Post Type UI」。名称で検索すれば使い方などもたくさん見つかります。

カスタム投稿 専用のプラグインの他、多機能拡張プラグイン「VK All in One Expansion Unit」にもカスタム投稿機能があります。

この方法は以下をご覧ください。

カスタム投稿を使ってトップページに更新情報などのエリアを作る
カスタム投稿とは? ワードプレス規定の「投稿」や「固定ページ」とは別に、投稿タイプをカスタマイズし、作成する事が出来ます。 通常の投稿とは別の目的になる記事を分類する事ができ、自由に投稿タイプを使えるので、例えば、「商品紹介」、「会員プロフ...

 

function.phpの編集

子テーマの「function.php」に、必要事項を追記します。

※子テーマにfunction.phpがない場合や、子テーマ自体がない場合は、親テーマでも行えますが、親テーマを編集すると、アップデートなどでカスタマイズしたものは消えてしまいますので注意。

 

functions.php を書き間違えると、WordPress そのものが動作しなくなります!

※バックアップをとるなど、必要な対応をしてから自己責任でお願いします。

function.phpを触らずにPHPコードを処理単位で記述・管理できるプラグインもあります。
詳しくは以下をご覧ください。

function.phpを直接触らず、いざという時はセーフモードもあるプラグイン
function.phpを直接編集するカスタマイズの際は、注意しないとワードプレス自体が動かなくなってしまう事があります。 当然、バックアップをとっておいたり、注意深く編集はしますが「万一」の場合のドキドキはありますよね。 そこで今回は、f...

 

外観→テーマエディタから「function.php」を選択

 

ルクセリタスの場合は、Luxelitas→子テーマの編集から

 

 

「新着情報」として作成する例

// カスタム投稿タイプ追加
function create_post_type_news() {
  $Supports = [
    'title',
    'editor',
    'thumbnail',
  ];
  register_post_type( 'my_news',
    array(
      'label' => '新着記事',
      'labels' => array(
      'all_items' => '新着記事一覧'
      ),
      'public' => true,
      'has_archive' => true,
      'menu_position' => 6,
      'supports' => $Supports
    )
  );
}
add_action( 'init', 'create_post_type_news' );

上記の例をコピーし、必要な部分(lavelall_itemsの内容)などを書き換えて下さい。

そのままコピペでも実装できますが、内容の詳細は以下をご覧ください。

 

使用パラメータ・引数解説

使用しているものについて簡単に説明しますが、更に詳細は以下をご覧ください。

関数リファレンス/register post type

 

 

register_post_typeパラメータ

<?php register_post_type( $post_type, $args ); ?>

$post_type
(文字列) (必須) 投稿タイプ(最大 20 文字、大文字や空白は禁止)。
初期値: なし

 

投稿タイプは、ワードプレスが使用するものは使えないので「my_post」など独自の名称にします。

今回の例では「my_news」の部分

予約済みの投稿タイプ(WordPress が使用)

  • post – 投稿
  • page – 固定ページ
  • attachment – 添付ファイル
  • revision – リビジョン
  • nav_menu_item – ナビゲーションメニュー

以下の投稿タイプは他の WordPress 関数の動作を妨害するので使用不可。

  • action
  • order
  • theme

 

$args
(配列) (オプション) 引数の配列。
初期値: なし

 

$supports

(文字列) (必須) チェックする機能。
初期値: なし

今回のサンプルで使用しているのはピンク文字のもの。それ以外も必要に応じて設定可能です。

  • title‘ (タイトル)
  • editor‘ (内容の編集)
  • ‘author’ (作成者)
  • thumbnail‘ (アイキャッチ画像)(現在のテーマが 投稿サムネイル をサポートしていること)
  • ‘excerpt’ (抜粋)
  • ‘trackbacks’ (トラックバック送信)
  • ‘custom-fields’ (カスタムフィールド)
  • ‘comments’ (コメントの他、編集画面にコメント数のバルーンを表示する)
  • ‘revisions’ (リビジョンを保存する)
  • ‘page-attributes’ (メニューの順序)(投稿タイプの hierarchical が true であること)
  • ‘post-formats’ (投稿のフォーマットを追加)

 

public

(真偽値) (オプション) 投稿タイプをパブリックにするかどうか。

true の場合、管理画面とフロントエンド(ユーザー)の両方から利用可能。
初期値: false

‘false’ – 投稿タイプをパブリックにしない。他のところで明示的に用意しない限り、管理画面とフロントエンドのどちらからも使えない。
‘true’ – 投稿タイプをパブリックにする。フロントエンドと管理画面の両方から使えるように。

 

has_archive

(真偽値|文字列) (オプション) この投稿タイプのアーカイブを有効にする。

デフォルトでは、アーカイブのスラッグとして $post_type が使われる。
初期値: false

 

menu_position

左側のメニューに表示される位置の指定。

ワードプレスの規定値は以下の通りなので、作成するカスタム投稿に”6”を指定すると、投稿の下に入ります。

  • 投稿 :$menu[5]
  • メディア :$menu[10]
  • 固定ページ :$menu[20]
  • リンク $menu[15]

 

カスタム投稿を5つ以上作った場合、「投稿(5番目)」の下に4つ(6,7,8,9番目として)入り、5つ目は「メディア(10番目)」の下(11番目~)になります。

 

だと「投稿」の下。「固定ページ」の下にしたい場合は 20~にして下さい。

 

 

複数のカスタム投稿タイプを作成

上記と同様に追記します。

「新着情報」と「テスト」を作った例

メニューの7番目の位置に「テスト」で作ってみます。

function create_post_type_test() {
  $Supports = [
    'title',
    'editor',
    'thumbnail',
  ];
  register_post_type( 'my_test',
    array(
      'label' => 'テスト',
      'labels' => array(
      'all_items' => 'テスト一覧'
      ),
      'public' => true,
      'has_archive' => true,
      'menu_position' => 7,
      'supports' => $Supports
    )
  );
}
add_action( 'init', 'create_post_type_test' );

 

 

 

記事作成

作成したカスタム投稿タイプの記事を書くには、メニューから通常の投稿のように編集します。

 

 

 

作成した記事を表示する

記事の表示方法については以下をご覧ください。

WordPressのウィジェットにプラグインなしでPHP記述・カスタム投稿表示での例
ウィジェットエリアに出力したいもので、PHPコードで記述したい場合、通常の「テキスト」や「カスタムHTML」では不可能です。 それを実現するプラグインなどを使う事も出来ますが、テーマのfunction.phpに少し手を加えるだけで、ウィジェ...

 

綾糸: 綾糸 主婦 1990年代、汎用機時代のエンジニア 趣味で長くやっていたweb制作は、未だにエディタでの手コーティング 現在は自宅でゆるりとweb制作やライターをしています