Wordpressカスタムテンプレートに外部PHPファイルを含める
-
-
http://codex.wordpress.org/Integrating_WordPress_with_Your_Websiteを見てくださいあなたの質問に答えるはずです.Take a look at http://codex.wordpress.org/Integrating_WordPress_with_Your_Website should answer your question.
- 0
- 2013-08-26
- Mark Davidson
-
あなたはそれを使うことができます.あなたが直面している問題は何ですか?You can use it. What's the problem are you facing?
- 1
- 2013-08-26
- Vinod Dalvi
-
こんにちは、私はワードプレスフォルダ内のファイルをコピーして適切にリンクしました..とにかく、この質問の答えは何ですか?空白の白いページが表示されますhi, i just copied my files inside the wordpress folder and linked them properly.. anyway, whats the answer on this question? I just get a blank white page
- 0
- 2013-08-26
- Jeremi Liwanag
-
明確にするために、外部サイトにあるファイルを含めようとしていますか?もしそうなら、phpファイルサイトの現在の権限はこれらのファイルへのパブリック読み取りアクセスを許可していますか?Just to be clear, you are trying to include files that are located on an external site? If so, do the current permissions of the php files site allow public read access to these files?
- 0
- 2014-02-13
- iyrin
-
6 回答
- 投票
-
- 2014-03-25
いいえ、指定した方法でテーマにPHPファイルを含めることはできません.
理由を理解するために私たちがしなければならないのは、常識と基本的な批判的思考を行使することだけです.
- リモートサーバーに対してリモートリクエストを実行することになります
include
はこれを実行できません - 何らかの奇跡によってそれが機能した場合、次のようなことができるため、セキュリティが大幅に悪用されます.
include( 'http://yoursite/wp-config.php' ); echo DB_PASSWORD;
.ウェブサイトをハッキングするのがいかに簡単か想像してみてください!facebook.com/index.php
を含めて私を止めるにはどうすればよいですか? - それでもなんとか機能し、安全だったとしたら、その遅さを想像してみてください.サーバーにリクエストを送信すると、サーバーが移動して、ヘッダー用に1つ、サイドバー用に1つ、フッター用に1つ作成します.待っている間、誰が気にする必要がありますか?
- しかし最後に、includeがリモートリクエストを行う可能性があるとしても.それができないのはなぜですか、なぜPHPコードを返すのでしょうか?サーバーが吐き出したもの、つまり完成したhtmlを返しませんか?サーバーは返される前にPHPを実行するため、含めるものにPHPは含まれません.
いいえ、それは不可能です.しかし、質問のコードをPHPスクリプトにすばやくコピーして貼り付けた後、すばやくアクセスすると、ここにいる誰よりも速いことがわかります.
代わりに、サーバーが現在実行されているローカルファイルシステムのファイルのみを含めることができます.includeまたはrequireステートメントにURLを渡すことは決してありません.
したがって、index.phpにいて、同じフォルダーにsidebar.phpというファイルがある場合は、次のように含めます.
include('sidebar.php');
include
は、これが失敗した場合に値を返します.includeステートメントのセマンティクスは一般的な基本的なPHPであり、このQ& Aサイトではトピックから外れています.ただし、代わりに使用する必要があるWordPress API関数があり、必要なものを含めて必要とするよりも優れているため、この質問は開いたままにしました.
テーマにテンプレートパーツを含めるには、次を使用します.
get_template_part( 'partname' );
この関数は、指定したパーツの子または親テーマの内部も調べます.
たとえば、このコードでは:
get_template_part( 'sidebar', 'first' );
最初に見つけたものを探して含めます:
- 子テーマ
sidebar-first.php
- 親テーマ
sidebar-first.php
- 子テーマ
sidebar.php
- 親テーマ
sidebar.php
テンプレートファイルを含めるには、get_template_partのみを使用する必要があることに注意してください.ライブラリなどのファイルや、htmlを出力しないその他のPHPファイルを含めるために使用しないでください.
続行する前に、次のテーマについてよくお読みになることをお勧めします.
- PHP.Netのinclude関数とrequire関数
- 親と子のテーマ
- テンプレート階層とWordPressが使用するテンプレートを選択する方法
-
<?php php ?> <?php tag ?> <?php spam ?> <?php and ?> <?php why ?> <?php its ?> <?php bad ?>
-
get_template_part
-
WP_HTTP
API.本当に必要な場合は、APIに対してリモートリクエストを実行する必要があります.wp_remote_get
やwp_remote_post
などの関数がここで役立ちます. - PHPのデバッグ.ホワイトページはPHPの致命的なエラーですが、フロントエンドから非表示にするようにエラーログが設定されているため、知らないエラーログファイルに記録されています.エラーログを見つけ、
WP_DEBUG
でwp-config.php
を定義し、デバッグバーやクエリモニターなどのプラグインをインストールします.これらは非常に役立ちます.ただし、テンプレートフッターで必ずwp_footer
を呼び出してください.
No, you cannot include PHP files in a theme the way you indicated.
To see why, all we have to do is exercise some common sense and basic critical thinking:
- You would be doing a remote request to a remote server
include
cannot do this - If by some miracle it worked, you would have a major security exploit as I could then do something like this:
include( 'http://yoursite/wp-config.php' ); echo DB_PASSWORD;
. Imagine how easy it would be to hack websites! Whats to stop me includingfacebook.com/index.php
? - If even then it somehow worked, and it was secure, imagine the slowness! You make a request to the server, and then the server goes and makes another for the header, and another for the sidebar, and another for the footer, all that waiting, who could be bothered?
- But finally, even if include could make remote requests. Which it can't, why would it return PHP code? Won't it return what the server spits out, aka the finalised html? The server runs any PHP before it gets returned so there'd be no PHP in what your including..
So no, it's not possible. But a quick copy paste of the code in your question into a PHP script followed by a quick visit would have told you that quicker than anybody here.
Instead, you can only include files from the local file system your server is currently running on. You would never pass in a URL to an include or a require statement.
So if I'm in index.php, and there is a file in the same folder called sidebar.php, I would include it like this:
include('sidebar.php');
include
returns a value if this failed. The semantics of the include statement are general basic PHP and are off topic on this Q&A site.However I kept this question open because there is a WordPress API function you should be using instead that is better than include and require for what you need.
To include a template part in a theme, use:
get_template_part( 'partname' );
This function will also look inside a child or parent theme for the part you specified.
For example, in this code:
get_template_part( 'sidebar', 'first' );
It will look for and include the first it finds of these:
- child theme
sidebar-first.php
- parent theme
sidebar-first.php
- child theme
sidebar.php
- parent theme
sidebar.php
It should be noted, that you should only use get_template_part to include template files. Don't use it to include files such as libraries, or other PHP files that do not output html.
I suggest you read up on the following subjects before continuing:
- the include and require functions on PHP.Net
- parent and child themes
- the template hierarchy and how WordPress chooses which template to use
<?php php ?> <?php tag ?> <?php spam ?> <?php and ?> <?php why ?> <?php its ?> <?php bad ?>
get_template_part
- the
WP_HTTP
API, for those genuine times you really need to do a remote request to an API. Functions such aswp_remote_get
andwp_remote_post
will help here. - PHP Debugging. Your white pages are PHP Fatal errors, but because you have error logging set to hide it from the front end, it's being logged to an error log file you're unaware of. Find your error log, define
WP_DEBUG
in yourwp-config.php
and install a plugin such as debug bar or query monitor, these will help you enormously. Make sure you callwp_footer
in your templates footer though.
-
- 2014-02-13
このシナリオがあるとします:
ワードプレスのインストールはサイトとして「www」ルートフォルダーでホストされ、header.phpは「www/includes」フォルダーにあります.
ワードプレスのテーマに追加するだけです
&lt;?php include( 'includes/header.php'); ?>
WordPressがテーマファイルを読み取るとき、ルートパスを使用します.
suppose you have this cenario:
Your wordpress instalation is hosted on 'www' root folder as your site, and your header.php is on 'www/includes' folder.
In you wordpress theme, just add
<?php include('includes/header.php'); ?>
When WordPress reads theme files, it uses the root path.
-
- 2014-02-03
include()
関数に外部リソースを含めることはできません.サーバーの内部パスによる作業を含めます.必要に応じてURLを含めることはできません.これはPHPのセキュリティ問題です!使用できるもの:
get_file_contents('http://your.url');
またはCurlライブラリを使用します.
You cannot include an external resource on
include()
functions! Include works by server internal paths. You cannot include an url as you want. It's a PHP security problem!You can use:
get_file_contents('http://your.url');
or use a Curl library.
-
ユーザーがあなたの主張を理解できるように、回答に多くの説明を追加してください.Please add a good deal of explanation to your answers to help the user understand your point.
- 1
- 2014-02-03
- Maruti Mohanty
-
- 2017-01-12
コアファイルを確認したところ、次のコードが見つかりました 関数
のファイルwp/wp-includes/general-template.php
get_header()
内次の行が見つかりました
$templates[] = 'header.php'; locate_template( $templates, true );
つまり、このようにコード(
index.php
)で使用しています<?php get_header(); $myphpfile[] = 'grid.php'; locate_template( $myphpfile, true ); ?>
When i checked the core files following is the code i found for in the file
wp/wp-includes/general-template.php
for functionget_header()
i found following lines
$templates[] = 'header.php'; locate_template( $templates, true );
So I am using it in my code (
index.php
) like this<?php get_header(); $myphpfile[] = 'grid.php'; locate_template( $myphpfile, true ); ?>
-
- 2018-04-24
子テーマの場合:
<?php echo get_stylesheet_directory_uri().'/subfoldername/add.php';?>
使用できます
For Parent Theme: get_template_directory() or get_template_directory_uri() For Child Theme: get_stylesheet_directory() or get_stylesheet_directory_uri()
For Child Theme:
<?php echo get_stylesheet_directory_uri().'/subfoldername/add.php';?>
You can use
For Parent Theme: get_template_directory() or get_template_directory_uri() For Child Theme: get_stylesheet_directory() or get_stylesheet_directory_uri()
-
- 2020-05-04
このような古い質問に投稿するには形式が悪いかもしれませんが、最近、同様のことをしなければならず、ここに示されていない方法を使用しているときにこの結果を見つけました.将来の探検家のためにそれを書き留めます;).
私の使用例は次のとおりです:
- サブディレクトリにインストールされたWordpress
- これらの要素にワードプレスを使用するのではなく、親サイトのフッター/ヘッダー要素を含めたかったのです
include()
またはrequire()
は絶対サーバーパスを使用できるため(例:/var/www/vhosts/foo.bar/httpdocs/includes/baz.php
)、WordpressのABSPATH
定義を使用してこれを生成できます:include( dirname( ABSPATH ) . '/includes/header.php' );
これにより、
/var/www/vhosts/foo.bar/httpdocs/includes/baz.php
が返されます.Wordpressがサブディレクトリ(例:
/var/www/vhosts/foo.bar/httpdocs/blog/
)にある場合でも、dirname( ABSPATH )
は関係なくドキュメントルート.たとえば、
$_SERVER['DOCUMENT_ROOT']
スーパーグローバルを使用して、これを行う他の方法があるかもしれませんが、私はそれを調査しませんでした.Might be poor form to post on such an old question, but I recently had to do something similar and found this result while using a method not shown here. Jotting it down for future explorers ;).
My use case was:
- Wordpress installed in subdirectory
- I wanted to include footer/header elements from the parent site, rather than using wordpress for these elements
Because
include()
orrequire()
can use absolute server paths (eg:/var/www/vhosts/foo.bar/httpdocs/includes/baz.php
), we can use Wordpress'ABSPATH
definition to generate this:include( dirname( ABSPATH ) . '/includes/header.php' );
this will return
/var/www/vhosts/foo.bar/httpdocs/includes/baz.php
.Even when Wordpress is in a subdirectory (eg:
/var/www/vhosts/foo.bar/httpdocs/blog/
),dirname( ABSPATH )
gives us the document root regardless.There might be other ways to do this, using the
$_SERVER['DOCUMENT_ROOT']
superglobal for example, but I didn't explore that.
外部PHPファイルをカスタムテンプレートに含めることは可能ですか?
自分のサイトにブログを追加しようとしています.私のサイトにはすでにヘッダー、フッター、サイドバーのレイアウトがあります.カスタムテンプレートでそれらを使用できますか?
私も試しました: