web-dev-qa-db-ja.com

外部を含める PHP Wordpressのカスタムテンプレートにファイルを追加する

カスタムテンプレートに外部のPHPファイルを含めることは可能ですか?

私は私のサイトにブログを追加しようとしています。私のサイトにはすでにヘッダー、フッター、サイドバーのレイアウトがあります。カスタムテンプレートでそれらを使用できますか?

<?php
/*
Template Name: Blog
*/
?>
<?php include( PATH . 'http://www.example.com/includes/header.php' );  ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

<div <?php post_class() ?> id="post-<?php the_ID(); ?>">
  <h2><a href="<?php the_permalink() ?>">
    <?php the_title(); ?>
    </a></h2>
  <?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
  <div class="entry">
    <?php the_content(); ?>
  </div>
  <div class="postmetadata">
    <?php the_tags('Tags: ', ', ', '<br />'); ?>
    Posted in
    <?php the_category(', ') ?>
    |
    <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?>
  </div>
</div>
<?php endwhile; ?>
<div class="mypagination">
  <?php include (TEMPLATEPATH . '/inc/nav.php' ); ?>
</div>
<?php else : ?>
<h2>Not Found</h2>
<?php endif; ?>
<?php include( PATH . 'http://www.example.com/includes/sidebar.php' );  ?>
<?php include( PATH . 'http://www.example.com/includes/footer.php' );  ?>

私も試してみました:

<?php include('http://mywebsite.com/includes/header.php'); ?>
5
Jeremi Liwanag

いいえ、指定した方法でPHPファイルをテーマに含めることはできません。

その理由を理解するために、私たちがしなければならないのは、いくつかの常識と基本的な批判的思考を行使することです。

  1. あなたはリモートサーバへのリモートリクエストをしているでしょうincludeはこれをすることができません
  2. もしそれがうまくいったとしても、私がこのようなことをすることができるように、あなたは重大なセキュリティの悪用をするでしょう:include( 'http://yoursite/wp-config.php' ); echo DB_PASSWORD;。 Webサイトをハッキングするのがどれほど簡単か想像してみてください。 facebook.com/index.phpを含めて私を止めたいのですが?
  3. それでもそれがどういうわけかうまくいって、それが安全であったならば、遅いことを想像してください!あなたはサーバーにリクエストをし、それからサーバーは行って、ヘッダーのために、サイドバーのために、そしてフッターのために別のものを作ります。
  4. しかし、最後に、たとえincludeがリモートリクエストをすることができたとしても。それができない、なぜそれはPHPコードを返すのでしょうか?それはサーバーが吐き出したもの、別名ファイナライズされたHTMLを返さないのでしょうか?サーバーは、返される前にPHPを実行します。したがって、PHPは含まれません。

いいえ、できません。しかし、質問の中のコードをPHPスクリプトに素早くコピーして貼り付けた後、簡単にアクセスすると、ここの誰よりも早くコピーができたことがわかります。

代わりに、サーバーが現在稼働しているローカルファイルシステムのファイルのみを含めることができます。あなたは決してインクルードや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_getwp_remote_postのような関数はここで役に立ちます。
  • PHPのデバッグあなたのホワイトページはPHP致命的なエラーですが、あなたはそれをフロントエンドから隠すために設定されたエラーロギングを持っているので、それはあなたが知らないエラーログファイルに記録されています。あなたのエラーログを見つけ、あなたのWP_DEBUGwp-config.phpを定義し、そしてデバッグバーやクエリモニタのようなプラグインをインストールしてください。ただし、必ずテンプレートフッターでwp_footerを呼び出してください。
7
Tom J Nowell

あなたがこのCenarioを持っているとしましょう:

あなたのワードプレスのインストールはあなたのサイトとしての 'www'ルートフォルダでホストされており、あなたのheader.phpは 'www/includes'フォルダにあります。

あなたのワードプレスのテーマでは、単に追加

<。php 
 include( 'includes/header.php'); 
?> 

WordPressがテーマファイルを読むとき、それはルートパスを使います。

2

include()関数に外部リソースを含めることはできません。サーバーの内部パスによる作業を含めます。あなたが望むようにURLを含めることはできません。これはPHPセキュリティ問題です。

あなたが使用することができます:

get_file_contents('http://your.url'); 

またはCurlライブラリを使用してください。

1
Giorgio Tedesco

以下のコアファイルをチェックしたとき、私は関数get_header()のファイルwp/wp-includes/general-template.phpで見つけたコードです。

次の行が見つかりました

$templates[] = 'header.php';

locate_template( $templates, true );

だから私はこのように私のコード(index.php)でそれを使用しています

<?php get_header();

    $myphpfile[] = 'grid.php';
    locate_template( $myphpfile, true );
?>
0
abdul rashid

子供のためのテーマ:

<?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()
0
Super Model