#
ドキュメント

Document

自分のための備忘録です。

カスタム投稿タイプ

カスタム投稿タイプを定義

/**
 * カスタム投稿タイプ example
 */
add_action('init', function create_example(){
    $labels = array(
        'name' => 'サンプル',
        'singular_name' => 'サンプル',
        'add_new' => 'サンプルを追加',
        'add_new_item' => '新しいサンプルを追加',
        'edit_item' => 'サンプルを編集',
        'new_item' => '新しいサンプル',
        'view_item' => 'サンプルを編集',
        'search_items' => 'サンプルを探す',
        'not_found' => 'サンプルはありません',
        'not_found_in_trash' => 'ゴミ箱にサンプルはありません',
        'parent_item_colon' => ''
    );   
    $args = array(
        'labels' => $labels,
        'public' => true,
        'capability_type' => 'post',
        'hierarchical' => false,  // 固定ページのように親子構造を持たない場合はfalse
        'supports' => array(
            'title'
        )
    );
    register_post_type('example', $args);
});

カスタム投稿タイプのパーマリンク

カスタム投稿タイプのURLに関しては、ダッシュボードでの設定はできませんし、思ったようなURL構成にするのが難しいです。

https://morilog.com/wordpress/post_type/post_type_permalink/

カスタム投稿タイプexampleのパーマリンクを、https://example.com/example/{{投稿ID}}にする。

  1. post_type_linkを使って、functions.phpにカスタム投稿タイプexampleのパーマリンクを定義
  2. rewrite_rules_arrayを使ってrewirte_rulesに上記定義をルールを追加
  3. 管理画面 > 設定 > パーマリンク設定を更新
// カスタム投稿タイプmanualのパーマリンク設定
add_filter('post_type_link', function ($link, $post) {
    if ('example' === $post->post_type) {
        return home_url('/example/' . $post->ID);
    }

    return $link;
}, 1, 2 );

add_filter( 'rewrite_rules_array', function($rules) {
    $new_rules = [
        'example/([0-9]+)/?$' => 'index.php?post_type=example&p=$matches[1]',
    ];

    return $new_rules + $rules;
});

Rwriteルールは、global $wp_rewrite['rules']に格納されているので、追加されているかを確認。

ref.

register_post_type()の第2引数のrewriteプロパティででパーマリンク構造を設定できるが分かりづらいので、常に上記方法で設定するのが良い。

カスタム投稿タイプのループ

<?php $lastposts = get_posts('post_type=example&posts_per_page=2'); ?>
<?php foreach($lastposts as $post) : setup_postdata($post); ?>
    <p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endforeach; ?>
<?php wp_reset_postdata(); ?>

カスタム投稿タイプの権限

カスタム投稿タイプにオリジナルの権限を設定する方法

以下User Role Editorを前提にする。

edit_{{カスタム投稿名}}にチェックしないと投稿画面自体を表示できない。

カスタム投稿タイププラグイン

Ref.