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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

6786閲覧

親テーマのサブディレクトリ内にある、phpファイルを子テーマで使いたい

nionio

総合スコア6

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/09/28 06:16

###前提・実現したいこと
(↓)のような

パス: .../themes/親テーマフォルダ/lib/shortcode.php

WordPressの、親テーマ直下ではなく
「サブディレクトリ」内にある、phpファイルを子テーマで使いたい場合、
どのようにすれば良いのかご教授ください。

※ただし、以下を前提としています。

■ 親テーマ側のファイル(functions.phpなど)には、一切手を入れない
(親テーマの更新対策のため、あくまで、子テーマ側で完結させたいです)

###試したこと

対象のphpファイルが、親テーマの「functions.php」で、
(↓)のように、読み込まれていたので、

require_once(

1

対象ファイルを、(↓)のように、子テーマ側に複製後、

パス: .../themes/子テーマフォルダ/lib/shortcode.php

子テーマの「functions.php」に、

require(get_stylesheet_directory() . '/lib/shortcode.php');

require get_template_part( 'shortcode' );

function remove_parent_theme_actions() {
remove_action( 'require_once' );
}
add_action('init','remove_parent_theme_actions');
add_action('includes');
function includes(){
require_once . 'lib/shortcode.php';
}

と、入れてみましたが、エラーとなりました。
(phpは、あまり詳しくないので、検討違いな事をしているかもしれません。。)

何卒、よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

自己解決

今回は、あまりに解決の糸口が見えないので、
phpはあきらめ、js(jquery)で同様の設定をすることにいたしました。

本来の解決ではないですが、クローズといたします。

※かなり調べましたが、
親テーマのサブディレクトリ内にある、phpファイルを
子テーマで使うやり方は、出てこないものですね。。(やりたい方は、多いように思いますが)
(もし指定するコードがわかる方がいれば、ぜひ教えて頂きたい限りです)

投稿2017/09/28 21:06

nionio

総合スコア6

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

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

0

子テーマ側にコピーしてfunctions.phpで読み込むようにすれば良いだけではないですか?

追記

どんなテーマか知りませんが、エラーは関数が重複してるだけだと思うので、親テーマでこんな感じで読み込んでるとしたら

function parent() { require_once( 'lib/shortcode.php' ); } add_action( 'hoge', 'parent' );

必要なファイルを子テーマ側にコピーして

関数名を変えてfunctions.phpに追加すれば良いと思いますが?

function child() { require_once( 'lib/shortcode.php' ); } add_action( 'hoge', 'child' );

投稿2017/09/28 06:43

編集2017/09/28 09:43
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nionio

2017/09/28 06:58

親テーマ側「functions.php」と同様に、 子テーマ側「functions.php」に、(↓)と書いてしまうと、 require_once( 'lib/shortcode.php' ); 「Fatal error: Cannot redeclare」と、同名関数が定義されている、とのエラーが出るため、 そのまま持ってくるだけでは、ダメなようです。。
退会済みユーザー

退会済みユーザー

2017/09/28 07:08

よく考えたらそうですね、しかもそれを試したと書かれてますね… ちゃんと読まないダメな癖です。 ではshortcode.phpの中で定義している関数をremove_actionやremove_filterで取り除いてからrequire_onceで読み込んだらどうですか? 数が多かったら大変ですが。
退会済みユーザー

退会済みユーザー

2017/09/28 07:26

あ、いやいや、親テーマのfunctions.phpをそのままコピーしてたら大丈夫なはずです。
nionio

2017/09/28 07:59

>ではshortcode.phpの中で定義している関数をremove_actionやremove_filterで取り除いてから>require_onceで読み込んだらどうですか? こちらは、上の通り、試してみたのですが、書き方が間違っていますでしょうか? >あ、いやいや、親テーマのfunctions.phpをそのままコピーしてたら大丈夫なはずです。 そのままコピーとは、具体的にどのようにしたら良いのでしょうか? (何分、PHPは詳しくないため、よくわかっておらず、申し訳ないです) ちなみに、子テーマ側「functions.php」は、テーマの方で、はじめから用意されているものを使っています。
退会済みユーザー

退会済みユーザー

2017/09/28 08:12

functions.phpも親テーマのものをそのまま使ってれば大丈夫だと思いますが。
nionio

2017/09/28 09:06

リンク先は、すでに読んでおり、 既出の通り、get_stylesheet_directoryも試しています。 具体的な解決方法(コード)で、ご回答頂けませんでしょうか。
退会済みユーザー

退会済みユーザー

2017/09/28 09:51 編集

追記しました。 親テーマに定義された関数がparentだとしたら全てchildに置換した上で利用した方がミスが無いかと思います。
nionio

2017/09/28 12:21

追記いただき、ありがとうございます。 ただ、関数名を変えただけでは、重複エラーはでませんが、 親の「require_once( 'lib/shortcode.php' );」が残っているためか、 子テーマ側の'lib/shortcode.php' を読み込みません。 やはり、remove_actionが必要なのかなぁと思っています。 こちらも、コードをご教示いただけますでしょうか。
退会済みユーザー

退会済みユーザー

2017/09/28 12:56

親テーマがadd_action( 'hoge', 'parent' );のような記述だった場合、子テーマのfunctions.phpでremove_action( 'hoge', 'parent' );とすれば良いですが、その内容によっては無効にならない場合もあるので、その場合はテンプレートへ追加すれば良いです。例えばheader.phpなりfooter.phpなりpage.phpなり。
nionio

2017/09/28 21:00

親テーマの記載が、add_actionや、functionで定義されておらず、 require_once( 'lib/shortcode.php' ); 一行のみで、 こちらが試した限りだと、remove_actionは、うまく反映されませんでした。 (そのため、別phpに追加するのは、試しておりません)
退会済みユーザー

退会済みユーザー

2017/09/29 00:46

require_once( get_stylesheet_directory() . 'lib/shortcode.php' );とでもしておけば良いんじゃないですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問