WordPress テーマ内の PHP ファイルをカスタマイズすると、テーマをアップデートした際に上書きされて、カスタマイズが無かった事になってしまいます。そこで、子テーマを用意して子テーマの PHP ファイルをカスタマイズしておけば、親テーマをアップデートしてもカスタマイズを残す事ができます。という事で、試しに 404.php をカスタマイズしてみました。
子テーマを作成
例では、twenty-minutes というテーマを使用しています。
cd /var/www/html/wp-content/themes
mkdir twenty-minutes-child
cat <<"EOF" > twenty-minutes-child/style.css
/*
Theme Name: twenty-minutes-child
Template: twenty-minutes
*/
EOF
cat <<"EOF" > twenty-minutes-child/functions.php
<?php
function theme_enqueue_styles() {
wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array('parent-style'));
}
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
?>
EOF
cp twenty-minutes/404.php twenty-minutes-child/
chown -R www-data:www-data twenty-minutes-child
カスタマイズ前の 404 ページ

子テーマを有効化

404.php をカスタマイズ
変更前の状態
<?php
/**
* The template for displaying 404 pages (Not Found).
*
* @package Twenty Minutes
*/
get_header(); ?>
<div class="container">
<div id="content" class="contentsecwrap">
<section class="site-main">
<header class="page-header">
<h1 class="entry-title"><?php esc_html_e( '404 Not Found', 'twenty-minutes' ); ?></h1>
</header>
<div class="page-content">
<p><?php esc_html_e( '404 Not Found', 'twenty-minutes' ); ?></p>
</div>
</section>
<div class="clear"></div>
</div>
</div>
<?php get_footer(); ?>
変更後の状態
<?php
/**
* The template for displaying 404 pages (Not Found).
*
* @package Twenty Minutes
*/
get_header(); ?>
<div class="container">
<div id="content" class="contentsecwrap">
<section class="site-main">
<header class="page-header">
<h1 class="entry-title"><?php esc_html_e( '404 Not Found', 'twenty-minutes' ); ?></h1>
</header>
<div class="page-content">
<p><?php esc_html_e( '404 Not Found : ページが見つかりませんでした', 'twenty-minutes' ); ?></p>
</div>
</section>
<div class="clear"></div>
</div>
</div>
<?php get_footer(); ?>
カスタマイズ後の 404 ページ
