子テーマの代わりにプラグインを使う方法

WordPress公式は、子テーマの使用を推奨していますが、プラグインからカスタマイズを行うこともできます。
それぞれ、メリットとデメリットがあります。

プラグインの作り方

フォルダ名は何でも良いと思います。ここでは、clock-child-pluginという名前のフォルダを作りました。
フォルダ内に、clock-child-plugin.php、style.cssファイルを作ります。PHPファイルはフォルダ名と同じにします。

clock-child-plugin.php
テーマや子テーマとは違い、phpファイルにコメントを書きます。

<?php
/*
Plugin Name: Clock Child Plugin
Plugin URI: http://colors-themes.com/clock/
Description: Clock Child Plugin
Version: 1.0.0
Author: Colors Themes
Author URI: http://colors-themes.com/
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Update URI: https://colors-themes.com/clock/clock-update/
Text Domain: clock-child-plugin
Domain Path: /languages
*/

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}
/* ----------------------------------------------------------------------
	# functions
---------------------------------------------------------------------- */

style.css

@charset "UTF-8";
/* ----------------------------------------------------------------------
	# style
---------------------------------------------------------------------- */

基本となるファイルは完成です。

親テーマのCSSをプラグインからカスタマイズする方法

テーマのCSSを上書きするために、プラグイン内のファイルに以下のコードを追記します。

clock-child-plugin.php
最後に読み込む必要があります(20で調整します)。

function clock_child_plugin_scripts() {
	wp_enqueue_style( 'clock_child-plugin-style', plugins_url( '/style.css', __FILE__ ), array(), '1.0.0' );
}
add_action( 'wp_enqueue_scripts', 'clock_child_plugin_scripts', 20 );

style.css
プラグイン内のstyle.cssに追記します。

body {
	line-height: 1.5;
}

親テーマの関数(PHP)をプラグインからカスタマイズする方法

子テーマと同じ方法でできます。

テーマ「テーマの関数(PHP)が、function_exists関数で囲われていない場合」

function clock_title_separator( $separator ) {
	$separator = '|';
	return $separator;
}
add_filter( 'document_title_separator', 'clock_title_separator' );

clock-child-plugin.php

function clock_remove_filter() {
    remove_filter( 'document_title_separator', 'clock_title_separator' );
}
add_action( 'after_setup_theme', 'clock_remove_filter' );

function clock_title_separator_child( $separator ) {
	$separator = '--';
	return $separator;
}
add_filter( 'document_title_separator', 'clock_title_separator_child' );

テーマ「テーマの関数(PHP)が、function_exists関数で囲われている場合」

if ( ! function_exists( 'clock_title_separator' ) ) :
function clock_title_separator( $separator ) {
	$separator = '|';
	return $separator;
}
endif;
add_filter( 'document_title_separator', 'clock_title_separator' );

clock-child-plugin.php

function clock_title_separator( $separator ) {
	$separator = '--';
	return $separator;
}
add_filter( 'document_title_separator', 'clock_title_separator' );

親テーマのテンプレート(PHP)をプラグインからカスタマイズする方法

アクションフック

テーマ内の「アクションフック」の位置に、プラグインから文字列等を挿入できます。

例) CLOCKテーマの404.php

テーマ開発者が書いておく必要があります。※CLOCKテーマには用意してありません。

<?php do_action( 'clock_404_action_content' ); ?>

clock-child-plugin.php
404ページのアクションフックの位置に、「Example01」という文字列を挿入します。

function example01() {
	echo esc_html__( 'Example01', 'clock-child-plugin' );
}
add_action( 'clock_404_action_content', 'example01' );

無名関数で書いても同じです。

add_action( 'clock_404_action_content', function () {
	echo esc_html__( 'Example01', 'clock-child-plugin' );
} );

フィルターフック

テーマ内の「フィルターフック」で表示される文字列等を、プラグインから修正できます。

例) CLOCKテーマの404.php

テーマ開発者が書いておく必要があります。※あまり見かけない書き方です。

<?php echo apply_filters( 'clock_404_filter_content', esc_html__( 'Example02', 'clock' ) ); ?>

clock-child-plugin.php
404ページに表示されている「Example02」を「Edit Example02」に修正します。

function example02( $example02 ) {
	$example02 = esc_html__( 'Edit Example02', 'clock-child-plugin' );
	return $example02;
}
add_filter( 'clock_404_filter_content', 'example02' );

無名関数で書いても同じです。

add_filter( 'clock_404_filter_content', function ( $example02 ) {
	$example02 = esc_html__( 'Edit Example02', 'clock-child-plugin' );
	return $example02;
} );

親テーマのjQueryオプション(JS)をプラグインからカスタマイズする方法

テーマ
テーマでget_theme_file_uri関数が使用されていてもプラグインからの場合は関係ありません。

function clock_scripts() {
    wp_enqueue_script( 'clock-js-custom', get_template_directory_uri() . '/js/custom.js', array( 'jquery' ), '1.0.0', true );
add_action( 'wp_enqueue_scripts', 'clock_scripts' );

clock-child-plugin.php
テーマのjs/custom.jsの読み込まず、プラグイン内のjs/custom.jsを読み込みます。
関数名が同じだとエラーが出ます。通常、最後に読み込みます(20で調整します)。

function clock_scripts_child() {
    wp_dequeue_script( 'clock-js-custom' );
    wp_enqueue_script( 'clock-child-plugin-js-custom', plugins_url( '/js/custom.js', __FILE__ ), array( 'jquery' ), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'clock_scripts_child', 20 );