WordPressの記事詳細で、特定の記事だけ404にしたい場合があったのでそれの方法を紹介します。『特定の条件分岐タグで404にする場合』と『特定記事idを404にする場合』と『カスタムフィールドと組み合わせる方法』の3つのソースコードを紹介したいと思います。ベースとなるものから少し変えただけですが、コピペできるように丁寧に紹介してみたいと思います。
特定の条件分岐タグで404にする場合
まず、基本的な特定の条件分岐タグで404にする方法です。
is_xxx で行う方法です。
functions.php に下記を追記します。
<?php
function specify_404() {
$flg_404 = false;
if (is_tag()) {
$flg_404 = true;
}
if ($flg_404 && !is_user_logged_in()) {
global $wp_query;
$wp_query->set_404();
status_header(404);
}
}
add_action('wp', 'specify_404');
- 『add_action』で 『wp』に対して、処理を追加してあげる方法をとりました。
- is_tag() は好きな条件分岐タグに差し替えればいろんな条件でできます。
- $wp_query->set_404(); で 404として指定します。
- status_header(404); で ヘッダー情報でも404と指定します。
- !is_user_logged_in() でWP管理画面ログイン中の場合は処理しないように指定しました。
これが基本計でほかにも応用した方法をほかにも紹介します。
特定記事idを404にする場合
functions.php に下記を記述することで対応する方法です。
<?php
function specify_404() {
$flg_404 = false;
// 404にする記事id
$single_404_lists = [
123,
];
if (!empty($single_404_lists) && is_single($single_404_lists)) {
$flg_404 = true;
}
if ($flg_404 && !is_user_logged_in()) {
global $wp_query;
$wp_query->set_404();
status_header(404);
}
}
add_action('wp', 'specify_404');
- 『add_action』で 『wp』に対して、処理を追加してあげる方法をとりました。
- $single_404_lists の配列に記事idを指定してあげてください。
- $wp_query->set_404(); で 404として指定します。
- status_header(404); で ヘッダー情報でも404と指定します。
- !is_user_logged_in() でWP管理画面ログイン中の場合は処理しないように指定しました。
ソースコードで記事idを指定する必要があるので完全にこれはエンジニア運用の方法になります。
カスタムフィールドと組み合わせる方法
先ほどの『特定記事idを404にする場合』は、エンジニアがブログ運用する場合は処理も軽くでき良いのですが、管理画面から操作でやりたい場合も書いときます。
前提として今回ACF(Advanced Custom Fields)を使った場合になりますが…
functions.php に下記を追記します。
<?php
function specify_404() {
$flg_404 = false;
$flg_post = get_field('hide');
if (!empty($flg_post)) {
$flg_404 = true;
}
if ($flg_404 && !is_user_logged_in()) {
global $wp_query;
$wp_query->set_404();
status_header(404);
}
}
add_action('wp', 'specify_404');
- get_field で 真偽タイプに設定した hide というName指定されたフィールドの値を取得します。(ACFプラグイン想定)
- $wp_query->set_404(); で 404として指定します。
- status_header(404); で ヘッダー情報でも404と指定します。
- !is_user_logged_in() でWP管理画面ログイン中の場合は処理しないように指定しました。
ACFを使った方法での照会になりますがこれなら、管理画面からチェックが入っていれば、その記事の詳細は404ページ!というのが可能になります。