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

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

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

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

PHP

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

Q&A

3回答

3135閲覧

WordPressのテーマファイルで外部のPHPから変数の値を取得出来ない?

D.O

総合スコア55

WordPress

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

PHP

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

0グッド

0クリップ

投稿2021/05/19 20:57

編集2021/05/20 03:52

読み込む側のPHPファイルをA,読み込まれる側のPHPファイルをBとします。
Bの中で設定した変数の値をAの側で使用する場合なのですが..

WordPressでない,普通(?)のPHPファイルでは想定通りA側の処理でBの中で入れた値を取得することが出来ます。

例えば..

a.php

php

1require_once("b.php"); 2echo $hoge;

b.php

php

1<?php 2$hoge="hoge"

これでa.phpにブラウザでアクセスすると結果として「hoge」が表示されます。

これと同じようにWordPressのテーマのテンプレートで..
例えばフロントページ用のテンプレートでpage-front.phpを編集して

papge-front.pphp

php

1//wordpressの関数やヘッダなど... 2require_once("b.php"); 3echo $hoge; 4 5//wordpressの関数やフッタなど

としてフロントページを表示すると..何も出力されません。
この動作の違いはWordPressの仕様によるものでしょうか?
不思議なことに読み込まれるphpファイルで定義した関数は実行されるます。
つまり,ファイルが読み込めていないということでは無いはずですが..。

また,WordPressのテンプレートを編集して独自の機能などを組み込みたい場合に,外部ファイルを読み込ませる時の定石などがあるのでしょうか?

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

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

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

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

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

CHERRY

2021/05/20 01:38 編集

どのファイルに どのように記載されたのでしょか。 ソースコードの例を質問に追記していただけないでしょうか。
m.ts10806

2021/05/19 23:01

できるか出来ないかだと大抵は「できる」ですよ。 出来なかったのは「そのように組まれてないから」 もちろん管理下にないことによる面倒な手続きはあるでしょうけど、結局はPHPなので、どう組んだか次第
guest

回答3

0

b.phpでグローバル変数として定義した上で呼び出す。
※functions.phpで変数宣言すると、グローバル変数として定義されるのでそれを踏まえて

php

1require_once("b.php"); 2global $hoge; 3echo $hoge;

投稿2021/05/20 06:48

編集2021/05/20 06:56
tcg

総合スコア25

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

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

D.O

2021/05/25 01:55

返信遅くてすみません 試してみましたがダメでした テーマファイルによるのかもしれません
guest

0

//wordpressの関数やヘッダなど...

require_once("b.php");
echo $hoge;

b.php は、どこにあるのでしょうか?
ログファイルに php のエラーが出ていませんか?(例えば File not found 等)

WordPress は、最初に index.php が実行されて、他のテーマやプラグインの php ファイルが、 include されて実行されています。
そのため、WordPress のテーマやプラグインの php ファイルで、require や include する場合は、フルパスで記載したほうが良いと思います。

また、WordPress の場合は、get_template_part という「テーマディレクトリにあるテンプレートパーツを読み込む」WordPress 関数が用意されているので、これを使うほうが良いでしょう。(子テーマも考慮されているので、子テーマ と親テーマのテーマディレクトリを順番にチェックして先に見つかったディレクトリから読み込みます。)

例:

get_template_part("b");

で、現在使用中のテーマディレクトリにある "b.php" を読み込みます。

投稿2021/05/20 04:05

編集2021/05/20 04:11
CHERRY

総合スコア25218

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

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

D.O

2021/05/20 04:52

あくまで例としてなので省略しましたが,フルパス書いてあります。 エラーは出ていないので読み込み自体は出来ているようですし,外部ファイルで定義した関数も実行されるのでファイル自体は読み込まれています。 なのに,変数だけは空になるのはWordPressの仕様なのかなんなのか...? get_template_part()を使うのが定石ですかね?
CHERRY

2021/05/20 05:52 編集

お使いの環境や具体的なファイル内容が不明ですが... こちらの環境( 新規インストールした WordPress 5.7.2 と twentytwentyone の子テーマ )では、テーマディレクトリに b.php をおいて、page-hoge.php (/var/www/example.com/wp-content/themes/twentytwentyone-child/page-hoge.php) の中で、 ``` require_once "/var/www/example.com/wp-content/themes/twentytwentyone-child/b.php"; echo $hoge; ``` と記載することで、http://example.com/hoge の固定ページで問題なく表示されました。 表示されない場合は、require でのファイルの読み込みに失敗しているか 質問に記載されていない他の部分と競合している可能性が高いと思います。
D.O

2021/05/25 01:58

テーマは Underscoresから作ったものです Wordpressのバージョンは5.7.2です どうやらテーマによってそのあたり違うのかもしれません。 以前,twentyseventeen等使ったときは普通に意図した形で読み込めたので..。
guest

0

テーマファイルの変数の参照うんうんの話とはずれるかもしれませんが、目的が「WordPressのテーマファイル内に独自の機能を持たせたい」ということであれば、テーマ関連のファイルを直接触るのは推奨されてなく「子テーマ」を作る方法が一般的です。

参考)
https://newstd.net/basic/12882

テーマ関連のファイルを直接触ってはいけない理由も書いてありますので参考にしてください。テーマのカスタマイズは子テーマの作成でたいていのことはできます。

投稿2021/05/20 01:25

AbeTakashi

総合スコア4853

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問