Notice: Undefined offset: 5 in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/functions.php on line 477
Notice: Undefined offset: 6 in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/functions.php on line 480
Notice: Undefined offset: 7 in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/functions.php on line 483
Notice: Undefined variable: blogcard in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/functions.php on line 350
Notice: Undefined offset: 5 in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/functions.php on line 477
Notice: Undefined offset: 6 in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/functions.php on line 480
Notice: Undefined offset: 7 in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/functions.php on line 483
Notice: Undefined variable: blogcard in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/functions.php on line 350
カスタム投稿タイプを作成するものの、一覧ページだけで記事詳細ページがいらなかったり、その逆もあったりするかと思います。その際にどの様に設定すればよいのか考察しました!
必要箇所が探しやすいように表示まとめました。それれぞれ「項目へジャンプ♪」から飛べます。
No | アーカイブ 一覧を出力 |
詳細記事 を出力 |
固定ページ から呼び出し |
参照部分へのリンク |
---|---|---|---|---|
方法① | ✕ | ✕ | ○ | 項目へジャンプ♪ |
方法② | ✕ | ○ | ○ | 項目へジャンプ♪ |
方法③ | ○ | ✕ | ○ | 項目へジャンプ♪ |
カスタム投稿タイプの登録の仕方はこちらの記事をお読みください♪
Contents
方法①:詳細&アーカイブは生成せず、固定ページから呼び出す場合
概要
- 管理画面から記事を登録でき、固定ページなどで呼び出して出力できます。
- archive-case.phpで出力されるアーカイブページ、single-case.phpで出力される詳細ページはありません。
- 投稿画面からも「パーマリンク」や「表示」というリンクが消えます。
- page-case.phpなどで固定ページで呼び出して使用します。
- 固定ページのスラッグとカスタム投稿タイプのスラッグが同じでも大丈夫です(この場合case)。
page-case.phpに出力したい内容を記載し、テーマフォルダにアップすればOKです。
ただ、詳細ページのurlに直でアクセスすると、index.php内容が表示されます。(アーカイブページは404表示になります。)
気になる場合はadd_filterで以下のリライトルールを追加すると404ページを表示させられます♪
functions.php
add_filter( ‘case_rewrite_rules’, ‘__return_empty_array’ );
//caseにはカスタム投稿タイプのスラッグを入れます。
コード
register_post_typeのarrayの値に以下を追加します。
- 'show_ui' => true, //UIを生成させる
次の値は初期値に戻す記述ですので、削除するか初期値の値を入れればOKです♪
- 'public' => false, //投稿タイプをパブリックにしない(初期値:false)
- 'has_archive' => false, //アーカイブを有効にしない(初期値:false)
functions.php
function create_posttype() {
register_post_type(
'case',
array(
'label' => '実績一覧',
//'public' => false,//投稿タイプをパブリックにするか(初期値:false)
//'has_archive' => false, //アーカイブを有効にするか(初期値:false)
'show_ui' => true, //UIを生成するか(初期値:public引数の値)
)
);
}
方法②:詳細ページは生成するが、アーカイブ一覧は生成しない場合
概要
- 管理画面から記事を登録でき、固定ページなどで呼び出して出力できます。
- 詳細ページはsingle-case.phpで出力をカスタマイズできます。
- archive-case.phpで出力されるアーカイブ一覧はありません。
- page-case.phpなどで固定ページで呼び出して使用します。
- 固定ページのスラッグとカスタム投稿タイプのスラッグが同じでも大丈夫です(この場合case)。
page-case.phpに出力したい内容を記載し、テーマフォルダにアップすればOKです。
コード
register_post_typeのarrayの値に以下を追加します。
- 'public' => true, //投稿タイプをパブリックにする
- 'has_archive' => false, //アーカイブを有効にしない(初期値:false)
- 'show_ui' => true, //UIを生成する(初期値:public引数の値)
次の値は初期値に戻す記述ですので、削除するか初期値の値を入れればOKです♪
functions.php
function create_posttype() {
register_post_type(
'case',
array(
'label' => '実績一覧',
'public' => true,//投稿タイプをパブリックにするか(初期値:false)
//'has_archive' => false, //アーカイブを有効にするか(初期値:false)
//'show_ui' => true, //UIを生成するか(初期値:public引数の値)
)
);
}
方法③:アーカイブ一覧は生成するが、詳細ページをさせない場合
どうもドンピシャで詳細ページだけを生成させない方法は無さそうでした。。。
結構需要あると思うのですが。
以下の2つの方法で対応するしかないのかなぁと思います。
A:この記事の1番最初で解説している方法①で対応する。
固定ページを別途作らないといけませんが、スッキリしてわかりやすい方法かと思います。
詳細&アーカイブは生成せず、固定ページから呼び出す場合B:詳細ページはリダイレクトか404にさせる
register_post_typeのarrayの値に以下を追加します。
- 'public' => true, //投稿タイプをパブリックにする
- 'has_archive' => true, //アーカイブを有効にする
次の値は初期値に戻す記述ですので、削除するか初期値の値を入れればOKです♪
- 'show_ui' => true, //UIを生成する(初期値:public引数の値)
functions.php
function create_posttype() {
register_post_type(
'case',
array(
'label' => '実績一覧',
'public' => true,//投稿タイプをパブリックにするか(初期値:false)
'has_archive' => true, //アーカイブを有効にするか(初期値:false)
//'show_ui' => true, //UIを生成するか(初期値:public引数の値)
)
);
}
このままだと詳細ページも表示されるので、詳細へのアクセスはアーカイブ一覧ページへリダイレクトさせます。
functions.php
add_action( 'template_redirect', 'my_redirect' );
function my_redirect() {
if(is_singular('case')){//caseの詳細ページへのアクセスの場合
$url = home_url('/case/', 'http'); //caseの一覧へリダイレクト
wp_safe_redirect( $url, 301 );
exit();
}
}
リダイレクトではなく、404にする場合は以下の記述にします。
functions.php
add_filter( 'case_rewrite_rules', '__return_empty_array');
//caseの部分にはカスタム投稿タイプのスラッグをいれます。
おまけ:タクソノミーページを出力させない
タクソノミーページを出力させないのも同じで、register_taxonomyのarrayに以下を記述します(^^)
- 'public' => false, //タクソノミーをパブリックにしない
- 'show_ui' => true, //UIを生成する
functions.php
register_taxonomy(
'case-cat',
'case',
array(
'label' => 'カテゴリー',
'public' => false,//タクソノミーをパブリックにするか(初期値:true)
'show_ui' => true,//UIを生成するか (初期値:public引数の値)
)
);
タクソノミーページに直接アクセスするとindexが表示されるので、気になる場合は404にしてください(^^)
functions.php
add_filter( 'case-cat_rewrite_rules', '__return_empty_array');
//case-catの部分はタクソノミーのスラッグをいれます。
おわりに
FAQの一覧ページなど、一覧にタイトルも本文もすべて出力させるので詳細ページが不要だったりすることって結構よくあると思うのです。
アーカイブページのみを生成する方法は見つけられませんでしたが、固定ページで呼び出す方法が一番スマートかなと思います(^^)
良い方法が無いかいつか探そうと思っていて、今回調べてみて結局なかったという、、、
どなたかの参考になれば幸いです
参考にさせていただいたサイト:
カスタムタクソノミーのアーカイブページやカスタム投稿ページを非表示にする | テクニカルノート
Notice: Undefined variable: post_id in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/comments.php on line 20
Notice: Undefined variable: aria_req in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/comments.php on line 23
Notice: Undefined variable: aria_req in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/comments.php on line 28
Notice: Undefined variable: html5 in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/comments.php on line 31
Notice: Undefined variable: aria_req in /home/users/0/sub.jp-unicanails/web/libre-co/wp/wp-content/themes/Libreco/comments.php on line 31