iyo のすべての投稿

“BLOG The Main Line”閉鎖のお知らせ

タイトルにもあるように、ブログ BLOG The Main Lineを閉鎖しますのでお知らせします。

ブログ名
BLOG The Main Line
終了日
2015/10/31

理由としては、

  • 無料ブログを使用しているため広告が多い
  • これ以上更新する予定がない
  • 公開している記事も古いものしかなく、このまま放置しておいたとしても役に立つものではない

ということが挙げられます。また、近いうちにこの創作所を改変する予定があり、この閉鎖もそれに合わせた形となります。

予定通り、2015/11/01に閉鎖しました。今までありがとうございました。(2015/11/03)

“第一駅撮区youtube派出所”を開設しました

以前に予告したとおり、YouTubeチャンネルを開設しましたのでお知らせします。

チャンネル名
第一駅撮区youtube派出所
URL
https://www.youtube.com/channel/UC2HgdDQvl–iUMX5DaQ8r5A

チャンネル名もお知らせした通りとなりました。まだ動画数がわずかですが、パソコン内には動画が溜まりに溜まっていますので、そのうちまとまった数に増えます(多分)。チャンネル登録していただければこちらからも登録したいと思っていますので、どしどし登録をお願いします!

YouTubeのチャンネル開設日が合わない

まずはこれをご覧ください。

youtube_channel-switcher

新しいチャンネルを作成しその後削除すると、アカウントだけが残り、またチャンネルを作成するときにそのアカウントを選択することができます。

ところで、画像の右下を見ると、この日の日付は2015/08/16だと分かります。ここで、チャンネルを作成してみると…

youtube_channel-about

なぜか15日と表示されます。どうやら日本時間ではなく、アメリカの時間で登録されているようです。日本とアメリカ(ニューヨークなどの東海岸)には14時間の時差があるので、日本ではチャンネルを14時以降に作成すると、日付が合うようになるはずです。

YouTubeチャンネルを開設します!

2015/08/01に、YouTubeチャンネルを開設することになりました!概要は以下の通りです。

開設日
2015/08/012015/09/01
チャンネル名
第一駅撮区youtube派出所(仮称)
内容
駅を発着、通過する列車を中心とする動画
更新頻度
不定期

ご覧の通り、ブログ 第一駅撮区の分区的な役割を持たせる予定です。つまり、列車の画像はブログを、動画はYouTubeを使用するという具合です。

最初は借りているサーバに動画をアップしようかと考えましたが、容量を考えるとYouTubeより良いものはないとの結論に至り、こうなりました。

チャンネルを開設し次第、詳細をお伝えします。

勝手ながら、開設を2015/09/01に延期します。しばらくお待ちください。(2015/08/02)

なぜかform要素で送信できない

この前、とある用でファイルのアップロード用にページを作っていたのですが、どうしても送信できないという事態が起こりました。

<form enctype="multipart/form-data" action="index.php" method="post">
  <input type="hidden" name="MAX_FILE_SIZE" value="10000000">
  <p>アップロードするファイル : <input type="file" name="upload"></p>
  <p>ファイル名 : <input type="text" name="name"></p>
  <p><input type="submit" value="送信"></p>
</form>

簡単に書けばこんなコードですね。

このファイルは”index.php”として保存し、最初は順調にコーディングしていたわけですが、”送信”をクリックしても、何も起きないのです。最初は2行目の”MAX_FILE_SIZE”がおかしいのかと疑い直してみたものの、変化なし。

次に、もしかして<input type=”file”>のname属性に”upload”は使えないのか??と変な疑問が浮かび、変えてみるもやはり変わりません。

試しにprint_r( $_POST );と書いて結果を見ると、NULLに。

とうとう困り果て、一番上の行に目をやると、<form>のaction属性が”index.php”になっていることに気づき、”/”に変えたところ、思い通りに動作しました。

なぜ動作したかというと、このサイトでは例えば”http://example.net/index.php”でアクセスすると、”index.php”が省略されたURLに転送される仕様になっており、実際に見ているのは”http://example.net/”になります。action属性にあった”index.php”とは別のものとして扱っているらしく、動作しなかったらしいのです。

アップロードするページに”index.php”と名付けることはあまりないですが…

WordPressで、カスタムフィールドのみを使って記事を投稿する#2

#1の続きです。

準備に入ります。

1.カスタムフィールドの項目数と名前を決める

ただ名前を決めるだけですが、これが意外と重要です。考慮すべきことは、項目数は少なければ少ないほうがいいということです。欲張ってたくさん作ってしまうと、後々本文として表示するためにfunctions.phpを改造するときに進まなくなります。

#1で挙げた例では、

date
撮影日
info
写真の説明
photo
写真のURL

というようにして設定しています。

custom-field_post-new

投稿の新規追加画面で、右上にある”表示オプション”をクリックし、”カスタムフィールド”にチェックします。すると上の写真のようになります。

ここで、自分が決めたカスタムフィールドの名前と値を書き連ねていきます。例えば、ある人が毎日の起きた時間をひたすら投稿する、という単純なブログを作るとすると、

名前 : 起きた時間 / 値 : 6:00という具合です。

ここで注意したいのは、ここで決めたカスタムフィールドの項目は、後で変更しにくいという点です。変更できないわけではありませんが、functions.phpを書き直す必要が出てきます。

2.本文として表示するようにする

今の状態で”公開”をクリックしても、何も公開されません。それもそのはずです。本文には、エディターに書いた内容しか表示しないからです。

本文として表示させるには、content.phpを改造する必要があります。このファイルを開き、<div class=”entry-content”>と書かれた場所を探します。そこには、こうあります。

<div class="entry-content">
	<?php the_content( __( 'Continue reading <span class="meta-nav">→</span>', 'twentytwelve' ) ); ?>
	<?php wp_link_pages( array( 'before' => '<div class="page-links">' . __( 'Pages:', 'twentytwelve' ), 'after' => '</div><p>' ) ); ?>
</div>

これはtwentytwelveテーマの場合です。これを次のように書き換えます。

<div class="entry-content">
	<?php article_content( $post-> ID ); ?>
	<?php wp_link_pages( array( 'before' => '<div class="page-links">' . __( 'Pages:', 'twentytwelve' ), 'after' => '</div><p>' ) ); ?>
</div>

上下のコードを見比べると、まずthe_content関数がなくなっています。これはエディターから投稿する際に使う関数なので、カスタムフィールドのみを使う場合は必要ないからです。

次に、article_contentという謎の関数が組み込まれています。関数の名前はなんでもいいですが、引数には$post->IDを指定しておきます。

ちなみに、ここで内容を書くのではなく、わざわざ関数としているのは、RSSでの表示にもこの関数を使うためです。ここでget_post_meta( $post->ID , '起きた時間' , true );としても6:00と表示されますが、関数にしておいたほうが変更する際にも便利です。

次に、functions.phpを開き、article_contentという関数を作ります。

function article_content( $id ) {
    $time = get_post_meta( $id , '起きた時間' , true );
    echo "<p>起きた時間は" . $time . "です。</p>";
}

起きた時間を表示させるなら、例えば上のようになります。

カスタムフィールドに登録されたデータを取得するget_post_meta関数の引数は、

第1引数
取得するメタデータの投稿ID
第2引数
カスタムフィールドの名前(日本語も可)
第3引数
戻り値を文字列とするか配列とするか。trueで文字列、falseまたは何も書かなかった場合は配列

となっています。

もしも、自分が起きた時間を”12:00″、ペットのポチが起きた時間を”不明”として、カスタムフィールドの値を”12:00,不明”と書いたとしましょう。そうすると、表示されるのは起きた時間は12:00,不明です。となってしまいます。”12:00″と”不明”を分けて表示するには、

function article_content( $id ) {
    $time_array = explode( ',' , get_post_meta( $id , '起きた時間' , true ) );
    echo "<p>私が起きた時間は" . $time_array[0] . "で、ポチが起きた時間は" . $time_array[1] . "です。</p>";
}

のようになります。PHPのexplode関数を使って、コンマで区切られた値をそれぞれ分けて配列にします。配列$time_arrayには、0番目の要素に”12:00″が、1番目の要素に”不明”が入ります。

これで投稿を表示することが可能となりました。

3.RSSにも表示するようにする

最後にRSSです。RSSには本文と同じ内容を表示するものとして考えます。

方法は簡単で、functions.phpに

function child_the_excerpt_rss() {
	return article_content( get_the_id() );
}
add_filter( 'the_excerpt_rss' , 'child_the_excerpt_rss' );

を書き足すだけです。フィルターthe_excerpt_rssは、WordPress Codexによると

投稿の抜粋を RSS フィードに含める前に適用される。

とあります。もしも投稿とRSSの内容を別々にする場合は、別の関数か内容を書くといいでしょう。

これで完成です。これで、起きた時間を書くだけで投稿が出来るようになります!

おまけへ

WordPressで、カスタムフィールドのみを使って記事を投稿する#1

WordPressは、GPLというライセンスで配布され、いくらでもサーバーにインストールできることから、たくさんのブログを作ることが可能です。そんなブログの中には、写真や文章の組み合わせが固定され、コードはどの投稿も大して変わらない、ということがあるかもしれません。

そんなときに味方になるのが、カスタムフィールドです。投稿ごとに変わる内容を記述するだけで、1つの記事を完成させることが出来ます。記述された内容は、あらかじめfunctions.phpに書かれたコードに流し込み、それを表示するという仕組みにすればいいわけです。

blog-ekidori

これがその利用例です(第一駅撮区)。投稿の全体を写すため縮小しています。

この画像内の”紀伊勝浦 -> 紀勢本線”とあるのがタイトルで、”撮影日 : 2014/09/21″が投稿の終わりです。このブログの投稿はすべてこんな感じで、写真とその説明のセットが何回か繰り返され、写真の撮影日を表示して終了しています。

このようなブログの場合、コードは大体決まったものになってきますので、工夫次第では1回の投稿で要する時間を短縮することが可能です。

blog-ekidori_post-new

次にこの投稿の編集画面を見てみましょう。カスタムフィールドが3つ見えます。投稿する際は、ここに内容を入力します。

ところで、撮影日は1回しか表示しませんが、写真とその説明の表示数は、写真の数によって変わります。このように2枚しかないときもあれば、逆に撮りすぎて10枚くらい追加したくなるときもあります。

この場合、ここでは、写真であれば写真を、説明であれば説明をそれぞれコンマ”,”で区切って記述し、1番目に書いた写真のURLと説明を、2番目に書いた写真のURLと説明を…というように要素を対応させて表示することで達成しています。

開発当初は、1つの写真とその説明のセットで1つのカスタムフィールドを充てようとしたのですが、そうすると10枚写真を追加したくなったときに、10回分のカスタムフィールドを作らなければならなくなるため、結局このようになりました。

このようにすることで、以下のような利点があります。

  1. 投稿にかかる時間を短縮できる
  2. 後で編集するために見返したとき、不要な部分がないため見やすい

逆に、欠点もあります。

  1. 投稿やRSSに表示させるために、コードを書き足さなければならない
  2. 内容に区切り文字が含まれていると、投稿内容がおかしくなる

欠点の2番目は、区切り文字を投稿内容に使わない文字に変えることで解決します。問題は1番目です。

カスタムフィールドは本来、特別なデータを扱うためのものであり、本文として表示するにはコードを書き足す必要があります。手間にはなりますが、長い目で見れば得になるはずです。

それでは次の記事より、カスタムフィールドのみを使った投稿の準備について続けていきます。

#2へ

ようこそweb無番地へ

このブログでは、市岡町創作所が公開するサイトについてのお知らせや、こんなもの作ったよーというような開発情報をお送りします。

そもそも、市岡町創作所ってなに?おいしいの?となるかもしれませんが、これは市岡町創作所のサイトの紹介ページをご覧いただくとして、ここでの説明は省きます。

こんなブログですが、どうか生暖かい目でご覧ください。

代表 iyo