WP ワードプレスのカスタム投稿タイプを自作する

WordPress

カスタム投稿タイプなんざ調べりゃゴロゴロ出てくるが、自分用のメモとして残していきます。

ワードプレス中級者になるために必要不可欠なのが、カスタム投稿タイプだと思います。
今回は中級者を目指す為にカスタム投稿タイプの設定方法をメモっていきます。

普段我々がワードプレスで記事を投稿する時、それはpostという投稿タイプです。ちなみに固定ページはpageです。カスタム投稿タイプを作るとは、これらの新ジャンルを作成するということです。

カスタム投稿タイプを作る手順

  • add_actionでinitに対するアクションフックを使う
  • メソッドを書く

今回はお知らせというカスタム投稿タイプを作ります。infoとでもしましょう。

まずはadd_actionを使います。

add_action('init','info_post_type');

アクションフックはinitを使用します。第二引数にメソッド名を指定しますので、次はこのメソッドを実装していきます

function info_post_type() {
    register_post_type('info',[
        'labels' => [
            'name' => 'お知らせ',
        ],
    ]);
}

もう見るからにカスタム投稿タイプを作りますよって関数を呼び出しています。
register_post_typeは必ずinitから呼ばれる必要があります。
第一引数は小文字でカスタム投稿タイプの名前にしておきます。

第二引数は配列になっています。labelsに関しては更に配列になっております。
その中でnameを指定しておりますが、他にももっとパラメータがありますが、今回は必要最低限なnameだけを定義しておきました。
これが管理画面で表示される名称になりますので”お知らせ”にしておきました。

しかしこれだけではまだ、使用できるようになりませんので、次のパラメータを書いていきます。

function info_post_type() {
    register_post_type('info',[
        'labels' => [
            'name' => 'お知らせ'
        ],
        'public' => true,
        'has_archive' => true,
        'menu_position' => 6
    ]);
}

publicをfalseにすると管理画面には表示されませんので、まぁ基本はtrueでいいでしょう。
has_archiveをtrueにすると記事一覧ページが有効になります。
menu_positionは並び順です。

他にもたくさんパラメータがあります
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_post_type

こうすると管理画面にお知らせが追加されていて、投稿タイプお知らせが投稿できるようになっています、。

アーカイブページ

has_archiveをtrueにするとこんなことができます。

テーマフォルダにarchive-info.phpを作ります。

<h1>お知らせ記事一覧</h1>
<ul>
    <li>記事あ</li>
    <li>記事い</li>
    <li>記事う</li>
</ul>

今回はhtmlだけ書いて挙動を確認します。

ところで、管理画面からお知らせページを開くとアドレスがホームURL/wp-admin/edit.php?post_type=info
のようになっています。パラメータがpost_type=infoになっていますね。

このアドレスを参考に、次のアドレスのアクセスしてみます

home_url/?post_type=info

すると先ほど作成したarchive-info.phpの内容が表示されています。
has_archiveをtrueにしておくと、お知らせ記事一覧ページなんてのが作れるようになるわけです。

カスタム投稿タイプの記事一覧ページを完成させる

カスタム投稿タイプは投稿タイプなので、取得する時はpostではないので注意が必要です。

<h1>お知らせ記事一覧</h1>

<?php
    $args = array(
        "numberposts" => -1,
        'post_type' => 'info'
    );
    $posts = get_posts($args);
    if($posts): ?>
        <ul>
        <?php
        foreach($posts as $post):
            setup_postdata($post); ?>
            <li><?php the_title(); ?></li>
        <?php endforeach; ?>
        </ul>
    <?php else : ?>
        <p>記事がありません</p>
    <?php endif; ?>
    <?php wp_reset_postdata(); ?>

‘post_type’ => ‘info’
お知らせタイプを指定してgetpostsしています。これだけでカスタム投稿タイプの記事一覧ページが作れます。

コメント

タイトルとURLをコピーしました