You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress自定义404页面问题:后台页面内容无法显示

WordPress自定义404页面无法加载后台页面内容的问题解决

错误原因

  • WordPress对404.php有特殊的模板层级规则,它是系统默认的404错误处理模板。当访问不存在的URL触发404时,系统会直接加载这个文件,完全跳过自定义页面模板的匹配逻辑。
  • 你给404.php添加Template Name注释无效,因为这个文件名属于WordPress核心模板的固定名称,不会被当作普通的自定义页面模板处理。这就是为什么改名为mytest.php(普通自定义模板)时能正常工作,但用404.php不行。

解决方案

有两种常用解决方式,可根据需求选择:

方式一:直接在404.php中调用指定页面内容

不需要依赖后台模板选择,直接在404.php里查询你创建的“Error 404”页面内容并输出,代码示例:

<?php
get_header();

// 建议改用页面ID查询(比如get_post(123)),避免标题修改后失效
$error_page = get_page_by_title('Error 404');

if ($error_page) {
    // 保留WordPress内容过滤(短代码、格式等)
    echo apply_filters('the_content', $error_page->post_content);
} else {
    // 备用默认内容
    ?>
    <div class="error-content">
        <h2>页面不存在</h2>
        <p>你访问的页面无法找到,请检查URL是否正确。</p>
    </div>
    <?php
}

get_footer();
?>

提示:页面ID可在后台编辑页面时从URL的post=xxx参数中获取。

方式二:自定义页面模板+修改404跳转逻辑

如果希望保留后台编辑页面时选择模板的灵活性,可按以下步骤操作:

  1. 将原404.php重命名为template-custom-404.php,保留顶部模板注释:
<?php
/*
*   Template Name: 自定义404模板
*/
?>
<?php get_header(); ?>
<?php
if ( have_posts() ) : ?>
    <?php while ( have_posts() ) : the_post(); ?>
        <?php the_content(); ?>
    <?php endwhile; ?>
<?php else : ?>
    <p>No content found.</p>
<?php endif; ?>
<?php get_footer(); ?>
  1. 在WP后台创建“Error 404”页面,选择“自定义404模板”并保存。
  2. 在主题的functions.php文件中添加以下代码,让WordPress触发404时加载该页面内容,同时保持正确的404 HTTP状态码:
function load_custom_404_page() {
    $error_page = get_page_by_title('Error 404');
    if (is_404() && $error_page) {
        global $wp_query;
        // 修改查询参数,让系统识别为页面请求
        $wp_query->is_404 = false;
        $wp_query->is_page = true;
        // 保留404状态码,不影响SEO
        status_header(404);
        // 查询目标页面内容
        query_posts(array('p' => $error_page->ID));
    }
}
add_action('template_redirect', 'load_custom_404_page');

内容的提问来源于stack exchange,提问作者Nav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:40:17