WordPressで独自のPHPページを公開したい場合、「Insert PHP Code Snippet」などのPHPプラグインを導入し、固定ページにショートコードを埋め込む方法が一般的ですが、それだとうまくいかない場合があります。
今回はWordpress構築済みのサーバにオリジナルのPHPページを公開する方法をご紹介します。DBの接続方法についても解説します。なお、サーバはwpXを使用していますが、基本的な操作は同じかと思います。
独自ページの公開方法
まずPHPファイルの格納場所ですが、ドキュメントルート直下です。
つまり下図の場所にディレクトリ(ここではbirth)を作成すると、「ドメイン名/ディレクトリ名/hoge.php」でアクセス可能になります。
wpXの場合wp-contentより上位の階層にFTPで接続するためには以下のオプションを有効にする必要があります。
ちなみに、Wordpress側のURLと独自ページのURLが重複した場合は独自ページの方が表示されます。
DBインポート方法
DBはダンプファイルをインポートするだけで問題ありません。ただし、注意点としてテーブル名の先頭に「wp_」が付いていなけれなりません。
wpXではコンソール画面からダンプファイルをインポート可能ですが、下図のように「wp_」を接頭辞とする必要がある旨の警告が記載されています。
WordPress環境に独自のテーブルを用意したい場合、開発時からテーブル名にはwp_を付けておくことをお勧めします。
インポート後の確認方法
インポート操作後はテーブルが正常にインポートされているかを確認します。
wpXではphpMyAdminが用意されているので、ログインボタンを押すだけでWeb管理画面にアクセス可能です。
下図のようにテーブル一覧が表示されるので、正常性を確認します。
DB接続方法
最後に、インポートしたテーブルへのアクセス方法をご紹介します。
通常、PHPでデータベースに接続する場合のコードは以下のようになるかと思います。
define( 'DB_NAME', 'hogehoge_w1' );
define( 'DB_USER', 'root' );
define( 'DB_PASSWORD', '' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8' );
function dbConnect(){
try {
$dsn='mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHARSET;
$pdo = new PDO($dsn, DB_USER, DB_PASSWORD);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
return $pdo;
} catch (PDOException $e) {
echo 'DB接続に失敗しました';
}
}
サーバにphpファイルをアップロードする際は、以下のように修正するだけでOKです。
require_once('../wp-config.php');
function dbConnect(){
try {
$dsn='mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHARSET;
$pdo = new PDO($dsn, DB_USER, DB_PASSWORD);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
return $pdo;
} catch (PDOException $e) {
echo 'DB接続に失敗しました';
}
}
※パスが「ドキュメントルート/公開ディレクトリ/funcgion.php」の場合
上記コードでは「wp-config.php」をrequire_onceしています。
実際に見てみると分かりますが、wp-config.phpには以下のような定数が宣言されています。
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'hogehoge_w1' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'hogehoge_w1' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'hogehogehoge' );
/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );
/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8' );
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define( 'DB_COLLATE', '' );
つまりwp-config.phpをrequire_onceしてしまえばDB接続に関する定数が使用できるので、DB接続が可能になるという事です。