カスタム投稿タイプごとに異なる404テンプレートが必要です。
例えば。投稿タイプ名が イベント でリンクは
domain.com/event/my-event-name
ただし、投稿のないページにリンクしている場合
domain.com/event/xxxxxxx
それから404ページが表示されますが、404.php
テンプレートとは異なるものにしたいのですが、404.php
で投稿タイプを取得しようとしますが、取得する投稿がないためできません。
WordPress 4.7では、 テンプレート階層 :を簡単に変更できる新しいフィルタが導入されました。
/**
* Filters the list of template filenames that are searched for when retrieving
* a template to use.
*
* The last element in the array should always be the fallback
* template for this query type.
*
* Possible values for `$type` include: 'index', '404', 'archive', 'author', 'category',
* 'tag', 'taxonomy', 'date', 'embed', home', 'frontpage', 'page', 'paged', 'search',
* 'single', 'singular', and 'attachment'.
*
* @since 4.7.0
*
* @param array $templates A list of template candidates, in descending order of priority.
*/
$templates = apply_filters( "{$type}_template_hierarchy", $templates );
404型の場合は、@ cjbjが示すように、現在のパスを確認できます。
現在のパスが404-event.php
正規表現パターン( PHP 5.4+ )に一致する場合、^/event/
テンプレートをサポートすることによって404テンプレート階層を変更する例を示します。
add_filter( '404_template_hierarchy', function( $templates )
{
// Check if current path matches ^/event/
if( ! preg_match( '#^/event/#', add_query_arg( [] ) ) )
return $templates;
// Make sure we have an array
if( ! is_array( $templates ) )
return $templates;
// Add our custom 404 template to the top of the 404 template queue
array_unshift( $templates, '404-event.php' );
return $templates;
} );
カスタムの404-event.php
が存在しない場合は、404.php
が代替となります。
@EliCohenが提案しているように、404.php
テンプレートファイルを必要に応じて調整することもできます。
locate_template()
が呼び出された後に発生する、古い404_template
フィルタ(WordPress 1.5以降)を使用することもできます。
これが例です( PHP 5.4+ ):
add_filter( '404_template', function( $template )
{
// Check if current path matches ^/event/
if( ! preg_match( '#^/event/#', add_query_arg( [] ) ) )
return $template;
// Try to locate our custom 404-event.php template
$new_404_template = locate_template( [ '404-event.php'] );
// Override if it was found
if( $new_404_template )
$template = $new_404_template;
return $template;
} );
さらにテストして、ニーズに合わせて調整できることを願います。
WPのテンプレート階層に従って、404ページに別のテンプレートを使用することはできません。 @Ranukaが示唆したように、テンプレートファイルを編集するか、あなた自身のメッセージを挿入することによって、あなたの404をカスタマイズしてカスタムコンテンツを表示することができます。
これを最初に読んでください: https://developer.wordpress.org/themes/basics/template-hierarchy/ それからあなたが望む解決策は何ですか(そして共有してください)?
結果がない場合、クエリは404を返します。だから、あなたの404.php
ページの問題は、それが何を引き起こしたのかについての問い合わせの知識がないということです。したがって、投稿タイプをテストすることはできません。
あなたが持っているのは、しかし、404を引き起こしたURLです。あなたのパーマリンクをどのように設定するかに応じて、これは投稿タイプについての情報を含むかもしれません。この例では、テンプレート内の テストできる文字列 として/event/
があります。このような:
$url = $_SERVER['REQUEST_URI']; // this will return: /event/my-wrong-event-name or so
if (false === strpos ($url, '/event/')) // important note: use ===, not ==
... normal 404 message
else
... event 404 message;