🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

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

PHP

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

Q&A

解決済

1回答

2559閲覧

Wordpressのテンプレートタグが使えない

Goethe

総合スコア17

WordPress

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

PHP

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

0グッド

0クリップ

投稿2021/03/11 11:59

編集2021/03/11 13:48

既存のhtmlファイルを、wordpress化しています。
index.phpというトップファイルを作成し、ある程度できあがったので、それから下層ページを作ろうとしたところ、他のページでテンプレートタグを使うとエラーが出てしまいます。特定のテンプレートタグではなく、すべてのテンプレートタグでエラーが出ています。index.phpでは正常に機能していたのに、なぜでしょうか?

ファイルの構成は、テーマファイルに「index.php」や「header.php」などを置き、そのなかで各下層ページのフォルダを作って、そこに「archive-news.php」などを作っています。

<試したこと>

<?php get_header(); ?>でエラーが出たため、header.phpを同じフォルダに設置したが、だめでした。そのあとテンプレートタグすべてにエラーがでてることに気付きました。

試しにnewsフォルダに入っているarchive-news.phpファイルを、フォルダから取り出し、index.phpと同じところに設置したが、それでもだめでした。

<エラー文>
( ! ) Fatal error: Uncaught Error: Call to undefined function get_header() in C:\Users\UserName\Local Sites\wordpressdemo\app\public\wp-content\themes\pondesign\news\archive-news.php on line 4
( ! ) Error: Call to undefined function get_header() in C:\Users\UserName\Local Sites\wordpressdemo\app\public\wp-content\themes\pondesign\news\archive-news.php on line 4

上記は、<?php get_header(); ?>をヘッドタグのなかに記述したときの一例です。他のテンプレートタグでも同様のエラーが出ています。下層ファイルでも、テンプレートタグを使用できるようにするには、どうすればいいのでしょうか?

<追加補足>
下層ページについては、index.phpファイルのaタグに「<a href="<?php echo get_template_directory_uri(); ?>/news/archive-news.php">NEWS</a>」と記述してアクセスしています。テンプレートタグが使えないので、cssが無効の状態になっています。local by flywheelで編集すると上記のエラーメッセージが表示され、MAMPで編集すると、テンプレートタグを使った時点で画面が真っ白になります。

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

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

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

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

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

guest

回答1

0

ベストアンサー

href="<?php echo get_template_directory_uri(); ?>/news/archive-news.php"
これが間違いです

WordPressのページは大まかに

  1. アクセスをWordPressのフォルダ直下のindex.phpにリダイレクト
  2. WordPressの基本の変数、定数、関数、クラスを読み込み
  3. アクセスされたURLを解析してページの種類と検索条件を決定しデータベースを検索
  4. ページの種類と検索結果に対応するテーマ内のテンプレートを使って表示

というようなプロセスを経て表示されます

1~3を飛ばしてテーマ内のテンプレートにアクセスしても
基本の変数、定数、関数、クラスも読み込まれていないし
ページの種類の決定やデータベースの検索もされておらず
テンプレートは何も表示することができません

投稿タイプnewsのアーカイブのURLを得たいのであれば
get_post_type_archive_linkを使って
href="<?= get_post_type_archive_link('news')?>"などとしましょう

投稿2021/03/11 16:06

編集2021/03/11 16:06
KazuhiroHatano

総合スコア7819

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

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

Goethe

2021/03/12 08:07

回答ありがとうございます。おかげ解決しました。htmlのように個別ファイルを用意してそれを繋げるのではなく、あくまでindex.phpを中心に派生していくという、ワードプレスの性質を理解していませんでした。aタグのhref属性には、追加したページのリンクをそのまま貼って対応することにしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問