WordPressのカスタム投稿タイプは、文字通りに投稿や固定ページとは違う投稿の集まりを作って公開する機能ですが、コンテンツを作ってショートコードで表示するような機能を持つプラグインなどでも利用されます。
以下がカスタム投稿タイプを追加する基本的なコードです(詳細な設定値等については公式ページをご覧ください)。
/* 投稿タイプを追加 */
function pwcn_create_post_type() {
$title = 'メニューに表示させる名前';
register_post_type('カスタム投稿タイプ名(スラグ)',
array(
'labels' => array(
'name' => esc_html($title),
'singular_name' => esc_html($title),
),
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'thumbnail','custom-fields'),
'rewrite' => array('slug' => 'カスタム投稿タイプのスラグ'),
'show_in_rest' => true, // Gutenbergを有効にする
'show_in_menu' => true,//設定メニュー内に表示させるため非表示にする
)
);
}
add_action('init', 'pwcn_create_post_type');
サイトの背後で使用する場合には「public」「has_archive」といったパラメーターをfalseにしておけば、公開画面(表示画面)上で表示されることはありませんが、そこで作ったコンテンツの内容を表示させる場合など、使い方によっては公開状態にしておく必要があるケースがあります。
それを仕方ないと放置してしまうと、検索エンジン経由でそのコンテンツに直接アクセスされたりしてしまい、意図しない状態となってしまうこともありますので、以下のようにしてできる限り直接表示させないようにしておくといいでしょう。
外からアクセスされないようにする措置
直接アクセスへの対処
管理者は見えるようにしつつ、外部からの直接アクセスは404ページへリダイレクトさせるためのコードです。
/* 投稿タイプへの直接アクセスを404ページへ遷移させる */
function pwcn_restrict_cpt_access() {
if (is_singular('カスタム投稿タイプのスラグ') && !current_user_can('administrator')) {
global $wp_query;
$wp_query->set_404(); // 404エラーを設定
status_header(404); // 404ステータスを送信
// サイトの404テンプレートを表示
include(get_404_template());
exit;
}
}
add_action('template_redirect', 'pwcn_restrict_cpt_access');
「カスタム投稿タイプのスラグ」の部分は任意に書き換えてください
noindexタグの付与
直接アクセスを防げているならまず問題はないと思われるが、誤って検索エンジンにインデックスされてしまわないように、noindexタグを付与しておくといいでしょう。
以下のコードを加えることでnoindexタグが付与できます。
/* 投稿タイプの投稿へnoindexタグを付与 */
function pwcn_add_noindex_cpt() {
if (is_singular('カスタム投稿タイプのスラグ')) {
echo wp_kses_post('<meta name="robots" content="noindex, nofollow" />') . "\n";
}
}
add_action('wp_head', 'pwcn_add_noindex_cpt');
「カスタム投稿タイプのスラグ」の部分は任意に書き換えてください
feedからの除外
/* feedから除外 */
function pwnc_exclude_cpt_from_feed($query) {
if ($query->is_feed() && $query->is_main_query()) {
// 除外したいカスタム投稿タイプのスラッグを指定
$post_types = $query->get('post_type');
// $post_typesが配列でない場合は配列に変換
if (!is_array($post_types)) {
$post_types = array($post_types);
}
$query->set('post_type', array_diff($post_types, array('カスタム投稿タイプのスラグ')));
}
}
add_action('pre_get_posts', 'pwnc_exclude_cpt_from_feed');
「カスタム投稿タイプのスラグ」の部分は任意に書き換えてください
コメントを残す