その他

[WordPress]index.htmlのままphpを動かして、取得した記事タイトルを更新情報として表示(さくらインターネットでの設定)

wordpressでhtml内でphpを動かす

クライアントのHPに手を入れました。

同一ドメイン内にあるWordPressの最新5件の記事タイトルを取得し、index.htmlに表示させる』という作業のメモです。
トップページによくある更新情報(トピックス)が作れます。

ポイントとなるのは、拡張子がhtmlのindexページでphpを動かす部分。

おおまかな作業の流れ

やったのは下記の作業です。

  1. 拡張子.htmlのままでphpが動くようにする
    • php.cgiファイルを作成
    • .haccessファイルを作成
    • 作成した2ファイルをアップロードしてパーミッションを変更
  2. index.htmlにphpを記述
    • 取得したいブログのwp-load.phpを指定
    • 記事タイトルを取得して表示

拡張子.htmlのままでphpが動くようにする

拡張子を.phpにしてしまえば簡単な話ですが、.htmlのままでphpが動くようにすることに大きな意味があります。

これまで使っていたURLを変えることなくすみますからね。

html内でphpを動かすためには、「php.cgi」と「.htaccess」という名前の2つのファイルを作り、アップロードしてパーミッションを変更します。

※さくらインターネットのレンタルサーバーの場合です。
※一般的なレンタルサーバーの場合については[おわりに]にて触れています。

※本項の内容とは外れますが、.htmlではなく.phpにする場合は、忘れずに.html⇒.phpへリダイレクトする設定をしておきましょう。また.phpと.htmlが同一ディレクトリに混在する場合は.phpの方を優先的に読み込むための設定もあります。(.htaccessに記述)

php.cgiファイルを作成

テキストエディタで下記2行を記述したphp.cgiファイルを作ります。

#!/bin/sh
exec /usr/local/bin/php-cgi

ファイルを作って保存する際、文字コードは「EUC-JP」で、改行コードは「LF」を選択します。

.haccessファイルを作成

テキストエディタで下記2行を記述した.htaccessファイルを作ります。

Action myphp-script /php.cgi
AddHandler myphp-script .php .html

上述のphp.cgiの場合と同様、文字コードは「EUC-JP」で、改行コードは「LF」を選択します。

もし、対象のindex.htmlがあるディレクトリ内にすでに.htaccessファイルが存在している場合は、その.htaccessファイル内に追記します。

作成した2ファイルをアップロードしてパーミッションを変更

対象のhtml(phpを実行したいもの)があるディレクトリにアップロードし、ファイルのパーミッションを設定します。php.cgiは「755」、.htaccessは「644」にしました。

ここまででhtml内でphpを動作させるための準備ができたことになります。

index.htmlにphpを記述

取得したいWordPressブログのwp-load.phpを指定

index.htmlファイルの1行目に下記を追記します。

<?php require_once( dirname(__FILE__) . '/wp-load.php' ); ?>

↑ どのワードプレスの情報を使うかを指定しています。

この記述は、対象のindex.htmlとブログが同じディレクトリにあるワードプレスを使う場合です。

※ちなみに今回のクライアントでは、パスの指定を「’/../news/wp-load.php’」としました。index.htmlとブログが同一ディレクトリではなかったため、index.htmlがある場所を基準に、「/..」で1つ上の階層(ルート)にあがり、「news」というディレクトリ内で管理しているブログの情報を使ったためです。

自分の環境でwp-load.phpファイルの在処を確認のうえ指定してください。

記事タイトルを取得して表示

更新情報として表示したいワードプレスの記事タイトルを取得しましょう。

一般的な更新情報として、リスト形式で「投稿日:記事タイトル」とする場合は下記になります。

<ul>
 <?php query_posts( 'posts_per_page=5' ); ?>
 <?php while ( have_posts() ) : the_post(); ?>
     <li><?php the_time( 'Y/m/d' ); ?>:<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
 <?php endwhile; ?>
</ul>

↑ 最新5記事分ループを回し、その間記事へのリンクを表示しています。

これが最小構成かな、好きに書き換えてください。

実行時エラーメッセージが出た(.htaccessでのphp.cgiの在処の記述ミス)

実行時、下記のエラーメッセージが出てしまいました。

The requested URL /php.cgi/index.html was not found on this server.

このエラーメッセージは、「.htaccess」の1行目で「php.cgi」の在処を記述しましたが、それが正しくない場合に表示されます。

※僕の場合は、クライアントのディレクトリ構成が特殊で、対象のindex.htmlファイルがドメイン直下ではなく、別ディレクトリにあったため指定がうまくいかずエラーが発生しました。

例えば、対象ファイルのあるディレクトリが、ルートディレクトリではなくXXXというディレクトリ内であれば、.htaccessファイルの1行目は、

Action myphp-script /XXX/php.cgi

となります。

このエラーメッセージが出た場合は、指定しているphp.cgiのパスがあっているか確認してみてください。

おわりに

今回、たまたまクライアントがさくらインターネットのレンタルサーバーを使っていたので、備忘録としてさくらインターネットでのやり方を書きましたが、一般的にhtml内でphpを動かす方法としては、.htaccessに下記2行を記述するだけです。

AddType application/x-httpd-php .php .html
AddHandler application/x-httpd-php .php .html

php.cgiや、それを動かすための.htaccessへの記述は必要ありません。

参考になりましたら幸いです。
ではまた!

ABOUT ME
ジュンイチ
今年3月からYouTubeスタートしました。『デスク周りの最適化』をテーマに商品レビューやPC関連のお役立ち動画を投稿しています。【NEXT目標:チャンネル登録者数300人】⇒ YouTubeチャンネルはこちら