/**
* カスタム投稿タイプ 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}}
にする。
post_type_link
を使って、functions.php
にカスタム投稿タイプexample
のパーマリンクを定義rewrite_rules_array
を使ってrewirte_rules
に上記定義をルールを追加管理画面 > 設定 > パーマリンク設定
を更新// カスタム投稿タイプ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_{{カスタム投稿名}}
にチェックしないと投稿画面自体を表示できない。