WordPressに夢小説公開機能をつける方法
夢小説サイトをWordPressで作る方法を説明します。
設置例はこちら→『屋上の少年』。
Contents
スクリプトをダウンロードする
夢小説用のスクリプトとしてはDreamMakerさんのCGIが有名です。
しかしWordPressはPHP製なので、組み込みやすいようaleviritaさんのdream.phpを使わせていただく事にしました。
aleviritaCSS・CDP(CSS着せ替えテンプレート)の配布・PHPスクリプトの公開や配布
サイトからダウンロードしたら解凍とURLの設定をして、好きな場所にアップロードします。
設定についてはaleviritaさんのマニュアルを参考に。
パーミッション等の設定は、特に必要ありませんでした。
今回はWPテンプレートディレクトリに「dream」フォルダを作り、その中にアップロードしました。
フォーム埋め込み
直接dream.php?formにアクセスしても良いのですが、置き場所のパスが見えてしまうのを避けたい場合は、フォームを埋め込みたいテンプレートに以下を記述します。
<?php require_once(TEMPLATEPATH.'/dream/dream.php'); nameForm();
私は夢小説用のカスタムタクソノミーにだけ表示させるよう、taxonomy.phpに条件分岐を使って記述しました。AMP化に伴い埋め込み形式では動かなくなってしまったので、当サイトでは別窓で設定する方法にしています。
ショートコードの登録
WordPressでは投稿フォームにPHPを記述できませんので、ショートコードを使って置き換えます。
single.phpの、the_content();
より前に以下を記述。
<?php require_once(TEMPLATEPATH.'/dream/dream.php'); function dream_code($atts){ extract(shortcode_atts(array( 'id' => 0 //デフォルトのID ), $atts)); ob_start(); //バッファ開始。これが無いと登録情報が全て本文冒頭に表示される myName($id); //dream.phpの関数 return ob_get_clean(); //吐き出す } add_shortcode('dream','dream_code');
こうする事で、記事内で[dream id=1]
と記述すると、ID1に設定した名前に置き換わるようになります。
上記のコードはfunction.phpに書いても大丈夫な筈。
ここまでで基本の機能は実装完了です。
以下のサイトが参考になりました。
お手軽WordPress Tips:プラグインを使わず投稿記事や固定ページの好きな場所に任意のPHPファイルを挿入、実行できるようにするWordPressで、記事や固定ページの好きな場所で、ショートコードを使って別途用意したPHPファイルを実行できたら便利だと思いませんか?いつもはほとんど需要のないカスタマイズを取り上げているこのお手軽WordPress Tipsのコーナー
dream.phpのアクセス制限
セキュリティが気になる方は.htaccess等で適宜アクセス制限を。
この際、リファラー制限の場合はサイトURLだけでなくリファラー無しの場合も許可してください。
内部リンクのみの場合は403エラーが出ます。
(不具合報告ありがとうございました!)
拡張機能を使う
拡張機能を使う場合はカスタムフィールドと併用すると少し楽です。
特定の項目のフォームだけ表示する
nameForm
関数に引数を渡すだけですので、投稿ページにフォームを表示させているならカスタムフィールドを使って以下のようにします。
<?php require_once(TEMPLATEPATH.'/dream/dream.php'); nameForm($post->dream1);
WordPressの投稿編集画面でカスタムフィールドの名前を「dream1」、値に「1,2」等と数値を区切って入れればOK。
ページ毎にデフォルト名を変える
今の所モード指定(手動取得)にしか成功していませんが、自動取得も頑張ればできそう。
ちょっと面倒ですが.iniファイルを直接編集する必要があります。詳しくはaleviritaさんのマニュアルを見ていただきたいのですが、.iniの方に各モードでのデフォルト値を登録し、カスタムフィールド(dream2)にモード番号を登録して、テンプレートの方でそれを呼び出します。
single.phpのrequire_once(TEMPLATEPATH.'/dream/dream.php');
の前に追記。
<?php if($post->dream2){$mode = $post->dream2;} require_once(TEMPLATEPATH.'/dream/dream.php');
名前をカスタム表示する
例えば名前に「サスケ」と登録したとして、「サスケェ…」と語尾に合わせて音を伸ばして喋らせたい場合等に使用します。
(ごめんなさいNARUTOわかりませんすみません。)
この場合はmyName
関数の代わりにCmyName
関数を使用するので、ショートコードを増やします。
先程のsingle.phpのショートコードを登録した所(add_shortcode('dream','dream_code');
の下)に追記します。
<?php function dream2_code($atts){ extract(shortcode_atts(array( //デフォルト値についてはマニュアルを参考にお好みで 'id' => 2, 'type' => 'd', 'kigou' => '、' ), $atts)); ob_start(); CmyName($id,$type,$kigou); return ob_get_clean(); } add_shortcode('dream2','dream2_code');
本文で[dream2 id=2 type=Ks kigou=…]
等として使用します。デフォルト値を設定しているので引数は省略可能です。