PHPもWordPressも全然知らないのにたまに触らないといけない状態が来てしまってつらい。

WordPressの投稿は、「通常の投稿」「固定ページ」などのように複数の種類に分けられています。この投稿の種類のことを、post type(投稿タイプ?)と呼ぶようです。今回はこ のpost typeを新たに登録する必要に迫られたので、行ったことのメモを残しておきます。

お試し環境構築

version: '3'
services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_PASSWORD: hogehoge
    volumes:
      - /path/to/my/wordpress:/var/www/html

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: hogehoge

このようなdocker-compose.ymlを作った後、docker-compose upしてlocalhost:8080から初期設定を適当に行えば、いい感じのWordPress環境が完成しているはずです。

Post typeの定義

post typeの定義は、functions.phpで行うのが一般的なようです。functions.phpwp-content/themes/(テーマ名)/にあるので、これを開き、以下のようにpost typeの定義を行います。

add_action('init', 'register_my_post_type');
function register_my_post_type() {
  register_post_type(
    'my-post-types',                        // 投稿タイプの識別子
    array(
      'labels' => array(
        'name' => __('my-posts'),           // 投稿タイプ名(複数形)
        'singular_name' => __('my-post')    // 投稿タイプ名(単数形)
      ),
      'description' => 'example post type', // 投稿タイプの説明
      'exclude_from_search' => false,       // 検索結果に表示するかどうか
      'public' => true
    )
  );
}

引数の詳細については、以下を参照:

functions.phpの編集後WordPressの管理画面を開くと、先ほど追加したpost typeがサイドメニューに追加されていることがわかります。

/img/post/2018-03-13-wp-side-menu.png

独自のpost typeの記事の投稿や編集は、このサイドメニューから通常の投稿と同じように行うことができます。

/img/post/2018-03-13-wp-edit-post.png

特定のpost typeの記事のみを検索

通常の記事検索ページのクエリにpost_type=POST-TYPE-IDENTIFIERを付けることで、指定したpost typeの記事のみを検索することができます。

/img/post/2018-03-13-wp-search-post.png