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

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

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

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

PHP

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

Q&A

解決済

1回答

1526閲覧

WordPressで管理するwebサイトにて、(WPコンテンツ用ではない)DBサーバを使って動的にページ生成したい

wwwww

総合スコア41

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/05/27 12:46

編集2019/05/27 17:51

■実現したいこと
WordPressで管理するwebサイトにて、別途DBサーバ(※)を使って動的にページ生成したい
※…WordPress用のDBサーバではなく、コンテンツ生成用DBを別途作成して使いたいと思っています。
具体的な一つとして、気象庁ページから情報をとってきて取り込み(その処理は別で実施)、
そのデータをPHPで動的にとってきて、(URLごとに固有の)webページを生成したい次第です。

■環境情報
KAGOYAサーバで、以下2サーバを使っています。
WP専用サーバ
DB専用サーバ(MySQL)
…最初に契約していたWP専用サーバでは、上述内容が実現しきれず、別途DBサーバを契約する必要があったため、(IPの異なる)別サーバ契約になっています。

■前提理解
WordPressで管理するページでのデータベース接続は、PDOではなく「$wpdb」というあらかじめ用意された変数を使う必要がある。
なので、適切な接続情報を使って wpdb クラスから独自のオブジェクトをインスタンス化する必要がある。参考サイト:関数リファレンス/wpdb Class

■詰まっている点
Bodyメインエリアのコンテンツを生成するテンプレページにて、以下記述。

<?php //データベースへの接続変数を作成。ユーザ名、パス、DB名、WPでは無い方用DBのIPを、それぞれ'で囲って入力。 $test_wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST); //testIDが1の情報をすべて取得。 $row_contents = $test_wpdb->get_row("SELECT * FROM $test_wpdb->TestTable Where testID = 11"); // 11が表示される想定でおりましたが、0と表示。 echo $row_contents->testID; ?>

正しく情報を取れてきていない状況です。
初心者のため、WordPressの構造がどうなっているか、今回関連する各コードがどう動いているかを把握しきれている自信が無いのですが、考えられる限り色々試した結果、問題解決に至らずご質問させていただいております。

■備考・その他
●問題箇所の特定を目的として、そもそもコンテンツ用のサーバに繋がっているのか確認したかったのですが、(今回用いている)WP専用サーバではSSHできなかったため、pingなどによる疎通確認は未実施です。(それ以外の手段で、確認できる手段がありましたら、別途ご教示お願いいたします)
●データ取得先DBに、testID = 11に該当する情報があることは確認しています。

★追記
ご追記、ありがとうございます。

ご記載いただいたコードについて、new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
の該当箇所を固有のものに変更した版を(上記と同一の)テンプレファイルに記載・実行したところ、
The site is experiencing technical difficulties.
というデザイン崩れ状態の表示になりました。

また、1行目の
require_once( '/path/to/wordPress-dir/wp-load.php' );
をコメントで抜いて再度更新したところ、
NULL
と表示されました。

(表示内容に伴ってこれから調べること、色々覚えるべきことが出てきたので、色々試行錯誤してみますが、一旦の)ご報告までに記載させていただきます。ありがとうございます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

$row_contents = $test_wpdb->get_row("SELECT * FROM $test_wpdb->TestTable Where testID = 11");

$test_wpdb->TestTable の部分ですが、wpdb クラスには、 WordPress 標準テーブルしか定義されていないのですが、wpdb クラスになにか定義を追加されましたか?

独自テーブルの場合は、直接テーブル名を記載してください。


(追記)

下記を実行したら 何が表示されるでしょうか?

<?php require_once( '/path/to/wordPress-dir/wp-load.php' ); $test_wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST); $row_contents = $test_wpdb->get_results("show tables;"); var_dump( $row_contents ); ?>

投稿2019/05/27 14:15

編集2019/05/27 15:49
CHERRY

総合スコア25171

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

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

wwwww

2019/05/27 14:26

早速のご回答ありがとうございます! >独自テーブルの場合は、直接テーブル名を記載 テーブル名がDokujiTableだったとしたら、 $test_wpdb->DokujiTable とする、で正しいでしょうか?であれば表示内容は変わりませんでした。 (定義ファイルに”直接”記載という解釈?) お手数おかけいたしますが、よろしくお願いします。
CHERRY

2019/05/27 14:32

` $test_wpdb->テーブル名 ` が使えるのは、 WordPress の wp-db.php で、定義されている WordPress デフォルトのテーブルだけです。 それ以外は、` select * from DokujiTable ` の様に テーブル名をそのまま記載します。
wwwww

2019/05/27 15:37 編集

ありがとうございますm(_ __)mなるほどです(言われてみればその通りでした…笑 失礼しました。) $test_wpdb->の部分を消して、テーブル名直書きにして再度実行して見たのですが…、表示は変わらず…。 改めて最初から最後まで確認する等したのですが、いずれでも表示は変わらないままでした。 その他問題ありと思われる箇所などあれば、ご教授願えませんでしょうか。 情報不足等であれば、お手数ですがその旨ご教示ください。何卒よろしくお願い申し上げます。
CHERRY

2019/05/27 23:30 編集

From で、テーブル名を直接指定しても結果が表示されないということでしたので、 new wpdb で、データベースに接続して、利用可能なテーブル名の一覧を表示させようとしています。 説明が不足していましたが、既存のテンプレートファイルに追加した場合、エラーが出たり、デザインが崩れたりしますので、既存ファイルに追加するのではなく、単独で 上記4行のプログラムだけの test.php のようなファイルを作成して、実行してみてください。 http://example.com/wp-content/themes/テーマ名/test.php の用な感じで実行してみてください。 なお、` /path/to/wordPress-dir/wp-load.php ` の部分は、インストールしたサーバーの wp-load.php のあるディレクトリのパスに 置き換えてください。 ---- 既存テーマで、 > $test_wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST); > $row_contents = $test_wpdb->get_results("show tables;"); > var_dump( $row_contents ); を実行して、null が、表示されるということは、データベースの検索に失敗しています。 ` show tables; ` は、アクセス可能なテーブルの一覧を表示するコマンドなのですが、なにも表示されないということは、利用できるテーブルが存在しないということになります。 原因としては、接続しているデータベースが間違っていて異なっているか 接続に失敗している等と思われます。 Web サーバーのエラーログになにかメッセージは出ていないでしょうか?
CHERRY

2019/05/27 23:33

追記に記載したプログラムが正常に実行されると ``` array(80) { [0]=> object(stdClass)#3671 (1) { ["Tables_in_wp"]=> string(23) "wp_commentmeta" } [1]=> object(stdClass)#3672 (1) { ["Tables_in_wp"]=> string(20) "wp_comments" } [2]=> object(stdClass)#3673 (1) { ["Tables_in_wp"]=> string(17) "wp_links" } [3]=> object(stdClass)#3674 (1) { ["Tables_in_wp"]=> string(19) "wp_options" } (以下略) ``` のような表示で、WordPress や 独自に追加したテーブルが表示されると思います。
wwwww

2019/06/04 01:10

回答遅くなり申し訳ありません。 上記頂いたshow tablesの結果が表示されるようになり、問題が解決いたしました。 原因は、私のDB接続情報の固有名詞の指定が間違っており…お恥ずかしい限りです。 CHERRYさん色々ご教示いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問