概要 ▶ 以下のブログ記事を読んで、文中に出てくるWordPressの「Public Post Preview」というプラグインはMovable Typeだったらテンプレート作るだけで似た様なことができるんじゃないの?と思い立って書き始めた記事です。ログイン不要でブログ記事を限定公開できるプラグイン「Share a Draft」が鬼便利 - カイ士伝 なお、WordPressは使ったことがないので、「Pub
本ページはプロモーションが含まれている場合があります
本ページはプロモーションが含まれている場合があります
以下のブログ記事を読んで、文中に出てくるWordPressの「Public Post Preview」というプラグインはMovable Typeだったらテンプレート作るだけで似た様なことができるんじゃないの?と思い立って書き始めた記事です。
なお、WordPressは使ったことがないので、「Public Post Preview」というプラグインはよく知らないので全然違うものができてしまうかもしれません(笑)。
なんか風邪を引いたみたいなので、うまく頭が回らないけど、書けるところまで書いてみます。
(早く寝ろ)
まずは「Public Post Preview」というプラグインで実現していると思われる「実際に公開するアドレスとは異なる類推しづらい一意の記事のアドレス」を作成します。
前提
ブログ記事だけを対象としました。実際に使う時はきちんとウェブページとブログ記事を判定してやれば良いのですが、今回はパス。
あと、Movable Type 4.1以降を対象とします。
まずカスタムフィードを作ります。
カスタムフィードは作成しますが、単なる判定用です。とりあえず今回は「cf_Public_Post_Preview」というチェックボックスのカスタムフィードを作成しました。
「MTOSを使っていてカスタムフィードが無いよ」という方は、タグに「@preview」などの(頭の1文字目が@の)プライベートタグをつけて、そのタグがあるかないかで判定しても良いでしょう。
次にテンプレートモジュールを作ります。
ファイル名を作成するテンプレートモジュールを作ります。テンプレートモジュール名は「ファイル名」にします。
中身は
<mt:If tag="cf_Public_Post_Preview"> preview/<mt:EntryDate encode_sha1="1" cat=".html"> <mt:Else> <$mt:EntryDate format="%y/%m/"$><$mt:EntryBaseName cat=".html"$> </mt:If>
とします。
簡単な解説
1行目:これはカスタムフィードの「cf_Public_Post_Preview」に値が入っているかどうか(=チェックはつけられているかどうか)を判定しています。2行目:「実際に公開するアドレスとは異なる類推しづらい一意の記事のアドレス」を作成します。
頭に付いている「preview/」は「preview」フォルダに入れるためです(別に何でも良い)。
出力されるファイル名はEntryDate(ブログ記事の作成時間)をsha1 16進数に変換し、「.html」を追加しています。
1f84eb1bfe9e4e3a19ba1d7cf97766ac31a498ce.html
こんな感じのファイル名になります。これなら類推されないでしょう。(少なくともpost-1.htmlとかより)
3行目:カスタムフィードの「cf_Public_Post_Preview」に値が入っていないなら
4行目:エントリーの通常のアドレス・ファイル名を出力します。年月毎のフォルダを作成する場合の出力です。
5行目:判定終わり
ファイル名をブログ記事に設定する
この出力結果をブログ記事のファイル名を設定するところに流し込めばOKですが、上記テンプレートモジュールは改行があるため、そのままでは使用できません。このため、グローバルモディファイアで改行と半角スペースとタブを削除してから出力します。
グローバルモディファイアの置き換えは「regex_replace」でOKですね。以下の様に設定します。
<$mt:Include module="ファイル名" regex_replace="/[\n \t]/g",""$>
ここまでで「実際に公開するアドレスとは異なる類推しづらい一意の記事のアドレス」を作ることができました。
あとは「公開」状態になっているとRSSなどに反映されてしまう問題についてはまた今度。