WP テーマ「Attitude」の*-extensions.phpを子テーマで編集したい時の解決方法

WordPressのテーマである「Attitude」の独自のPHPファイルを子テーマでカスタマイズしたい時、単純に子テーマのfunctions.phpから読み込ませてもうまくいきませんでした。header.phpやsingle.phpなどといったPHPファイルであれば、子テーマにそのままコピーして持ってくることで上書きされます。しかし、独自のPHPファイルは個別にインクルードしていく必要があり、特に「Attitude」テーマのPHPファイルは単純にインクルードしてもうまくいきませんでした。

親テーマのfunctions.phpを覗くと、attitude_initアクションにテーマに必要なPHPファイルが読み込まれるように登録され、その直後にattitude_initアクションが発動されていました。

まずは親テーマのattitude_load_filesアクションを削除をしたいのですが、削除するためには、親テーマが読み込まれた後、かつ、attitude_initが発動する前のタイミングになります。

親テーマが発動した後のフックに使うafter_setup_theme()関数では、attitude_initが発動した後になってしまいます。そのため今回は、attitude_initが発動したタイミングで親テーマのattitude_load_filesを削除することにしました。さらに、子テーマのfunctions.phpでattitude_load_files_childを新たに定義し、子テーマのPHPファイルを読み込まれるようにしています。

//親テーマfunctions.php/attitude_load_filesをフックから削除
function remove_attitude_load_files(){
	remove_action( 'attitude_init', 'attitude_load_files', 15 ); 
}
add_action( 'attitude_init', 'remove_attitude_load_files', 1 );

// attitude_initに新しく定義した関数を登録
add_action( 'attitude_init', 'attitude_load_files_child', 15 );

function attitude_load_files_child() {
	/** 
	 * attitude_add_files hook
	 *
	 * Adding other addtional files if needed.
	 */
	do_action( 'attitude_add_files' );

	/** Load functions */
	require_once( ATTITUDE_FUNCTIONS_DIR . '/i18n.php' );
	require_once( ATTITUDE_FUNCTIONS_DIR . '/custom-header.php' );
	require_once( ATTITUDE_FUNCTIONS_DIR . '/functions.php' );
	require_once( ATTITUDE_FUNCTIONS_DIR . '/customizer.php' );

	require_once( ATTITUDE_ADMIN_DIR . '/attitude-themeoptions-defaults.php' );
	require_once( ATTITUDE_ADMIN_DIR . '/attitude-metaboxes.php' );
	require_once( ATTITUDE_ADMIN_DIR . '/attitude-show-post-id.php' );

	/** Load Shortcodes */
	require_once( ATTITUDE_SHORTCODES_DIR . '/attitude-footer_info.php' );

	/** Load Structure */
	require_once( ATTITUDE_STRUCTURE_DIR . '/header-extensions.php' );
	require_once( ATTITUDE_STRUCTURE_DIR . '/searchform-extensions.php' );
	require_once( ATTITUDE_STRUCTURE_DIR . '/sidebar-extensions.php' );
	require_once( ATTITUDE_STRUCTURE_DIR . '/footer-extensions.php' );
	// カスタマイズしたいファイルを子テーマから参照.
	require_once( ATTITUDE_CHILD_DIR . '/library/structure/content-extensions.php' ); 

	/** Load Widgets and Widgetized Area */
	require_once( ATTITUDE_WIDGETS_DIR . '/attitude_widgets.php' );
}

石井秀幸@WEBデザイナー
横浜WordPress Meetup 主宰/株式会社ノクチ基地 取締役/モンゼンクリエイティブ合同会社 代表
WEB制作に関する技術や役立つ情報を発信していきます。10年にわたるWordPress歴を背景に、幅広いアイデアを形にするお手伝いをしています。