質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

4回答

4033閲覧

Wordpress 子テーマのphpが反映されません

375

総合スコア6

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2018/02/03 12:20

前提・実現したいこと

WordPress 初心者です。子テーマを知らずに親テーマを少し触ってしまったので
あわてて子テーマを作っています。
style.css はなんとか子テーマのものが反映されているようですが、
phpがうまく反映されません。いろいろ調べてみましたがどうにもならないので
お分かりになる方、何がいけないのか教えていただけると助かります。
宜しくお願いいたします。

発生している問題・エラーメッセージ

テーマはSydney

親テーマと並列に子テーマを作成
子テーマには、以下を格納
・style.css
・function.php
・widgets フォルダ その配下に fp-latest-news.php(←親テーマと同じ階層構造)

該当のソースコード

function.phpの中身は以下
ーーーーーーーーーーーーーーーーーーーーーーーー

<?php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); 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') ); } ?>

ーーーーーーーーーーーーーーーーーーーーーーーーー
fp-latest-news.php は、親のファイルをそのままコピー

試したこと

親テーマの fp-latest-news.php を触るとサイトに反映されますが、
子テーマの fp-latest-news.php の同じ個所を触っても反映されません。
(つまり、子テーマのphpファイルが反映されない)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

そもそも前提として
テーマのサブディレクトリにあるものは基本require等で読み込ませないと使用できません。
親テーマのfunctions.phpでrequireされているはずです

これは子テーマも同じで、子テーマのサブディレクトリに配置したものは、他の子テーマファイルみたいにコピーしただけでは上書きされません。
ですので子テーマのfunctions.phpで該当のファイルを読み込ませてあげる必要があります。

require_once(get_stylesheet_directory_uri().'/widgets/fp-latest-news.php'):

中身を見てないのですがウィジェットであればファイル内にクラスが定義されているはずなので、親テーマのクラスをオーバーライドするように編集してください。

投稿2018/02/06 01:31

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

375

2018/02/06 02:45

なるほど、サブディレクトリのものはそのままではだめだったんですね。ありがとうございます。やってみます。
Junkak

2018/09/23 02:39 編集

解決しましたか? 同じような問題があり、こちらのページにたどり着きました。 子テーマに上記の「require_once」を書くとエラーが出ます。 WordPress公式ページでもそう書いてあるのに、書く場所がおかしいのでしょうか。 http://wpdocs.osdn.jp/%E5%AD%90%E3%83%86%E3%83%BC%E3%83%9E
jo-ji

2021/01/07 00:53

>>Junkak >>子テーマに上記の「require_once」を書くとエラーが出ます。 親テーマ側でrequire_onceで読み込んでいるファイル(またファイル内の関数)を 子テーマ側で上書きすることはできません。 以下のサイトが参考になるかも。 https://foxorz.com/override-parent-theme-require-once-child-theme/
guest

0

ファイルの階層は375さんが書かれているままで、子テーマのfunctions.phpに親テーマのfunctions.phpから以下をコードを持ってきて一部書き換えてください。

php

1function sydney_widgets_initx() { //関数名を変更 2 register_sidebar( array( 3 'name' => __( 'Sidebar', 'sydney' ), 4 'id' => 'sidebar-1', 5 'description' => '', 6 'before_widget' => '<aside id="%1$s" class="widget %2$s">', 7 'after_widget' => '</aside>', 8 'before_title' => '<h3 class="widget-title">', 9 'after_title' => '</h3>', 10 ) ); 11 12 //Footer widget areas 13 $widget_areas = get_theme_mod('footer_widget_areas', '3'); 14 for ($i=1; $i<=$widget_areas; $i++) { 15 register_sidebar( array( 16 'name' => __( 'Footer ', 'sydney' ) . $i, 17 'id' => 'footer-' . $i, 18 'description' => '', 19 'before_widget' => '<aside id="%1$s" class="widget %2$s">', 20 'after_widget' => '</aside>', 21 'before_title' => '<h3 class="widget-title">', 22 'after_title' => '</h3>', 23 ) ); 24 } 25 26 //Register the front page widgets 27 if ( defined( 'SITEORIGIN_PANELS_VERSION' ) ) { 28 register_widget( 'Sydney_Latest_Newsx' ); //クラス名を変更 29 } 30 31} 32add_action( 'widgets_init', 'sydney_widgets_initx' ); 33 34if ( defined( 'SITEORIGIN_PANELS_VERSION' ) ) { 35 require get_stylesheet_directory() . "/widgets/fp-latest-news.php"; //表示したいファイル 36} 37

変更したい子テーマのfp-latest-news.phpのファイルのクラス名をfunctions.phpで書き換えたクラス名に変更

php

1class Sydney_Latest_Newsx extends WP_Widget { //クラス名を変更

参考:https://teratail.com/questions/84520

親テーマの上書きではなく、新たに同じ関数を付け加える形ですが……。

参考まで。

投稿2018/02/06 01:40

8-0_nyan5

総合スコア2352

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

375

2018/02/06 02:46

詳しく、ありがとうございます! やってみます。
guest

0

子テーマか親テーマの選択をかけるには
基本的にはget_template_part
でなければget_theme_file_path

親テーマ
template_directory()
template_directory_uri()

子テーマ
stylesheet_directory()
stylesheet_directory_uri()

子テーマになければ親テーマ
get_theme_file_path()
get_theme_file_uri()
get_template_part()

投稿2018/02/06 00:32

KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

375

2018/02/06 02:48

回答ありがとうございます。ただ申し訳ありませんが、これだけだとよくわかりません。
KazuhiroHatano

2018/02/06 03:14

子テーマを扱うにあたっては覚えておかないといけないことなので これらの関数の使い分けについては把握しておくことをお勧めします 要するに include(get_template_directory().'/fp-latest-news.php'); みたいに書かれてたら子テーマを探さないので include(get_theme_file_path('fp-latest-news.php')); とか get_template_part('fp-latest-news'); みたいに書き直さないとダメですよってことです functions.php style.css index.php とかの基本のファイルと home.php archive.php single.php とかみたいな WPの表示テンプレート選択の対象のファイルについては ファイルがあるだけで 「子テーマにあれば子テーマなければ親テーマのもの」 といった選択の対象ですが それ以外はこれらの関数によって 「子テーマのものを使う」 「親テーマのものを使う」 「子テーマになければ親テーマのものを使う」 といった切り替えをします クラスの定義ファイルとかなんかは 子テーマで上書きするんではなく 拡張して使ってくれってことで 「親テーマのものを使う」 というようにしているかもしれません
375

2018/02/06 05:33

ご丁寧にありがとうございます!(何度もスミマセン) 他の皆さまの回答も含めて、やってみます。
guest

0

念のため確認ですが、
Wordpressのメニューから「外観」→「テーマ」のテーマは、
子テーマに変更されましたか?

これを変更すると、
テーマのカスタマイズした内容が全て消えますので、
ご注意ください。

投稿2018/02/05 09:18

keniroya

総合スコア104

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

375

2018/02/05 14:26

子テーマの有効化は行いました。そういう意味ではないのでしょうか?  申し訳ありませんが、もう少し詳しく教えていただけませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問