Calendar2013.06.11
パーマリンクに %post_id% を使用しているとうまくいかないため、追記しました。

参考:WordPress category archives by date « Steve Taylor
参考:WordPressで指定したカテゴリーの年別アーカイブを作成する | webOpixel

実際にこのブログに適用してみました。

パーマリンクは下記を設定しています。(カスタム構造)

http://mekemoke.jp/%year%/%monthnum%/%post_id%.html

カテゴリアーカイブは下記のような URL になっています。(「ウェブ解析」カテゴリの場合)

http://mekemoke.jp/category/waca/

日付のアーカイブは下記のような URL になっています。(2012年)

http://mekemoke.jp/2012/

ですが、2012年のウェブ解析カテゴリの記事を表示しようとすると、404 not found になってしまいます。

http://mekemoke.jp/category/waca/2012/ ←動かない

ということで、下記を functions.php に追加してください。

これで、category-○○.php を用意しなくても下記のような URL で年別+カテゴリー別アーカイブにアクセスできます。

http://mekemoke.jp/category/waca/date/2012

うまくいかない場合

function.php に追加した後、一度パーマリンクの設定をデフォルトにしてから、もう一度同じカスタム構造を設定してみてください。上記のスクリプトは、応用すればタグ別の日付表示もできるみたいですね。

以下、過去の方法。

下記のページを参考にさせていただきました。

WordPress でカスタムフィールドの日付から年別アーカイブリストを作成する | wpxtreme

カスタムフィールドの場合はこちらがオススメ

WordPress > フォーラム ≫ 年度別アーカイブは可能でしょうか?

WordPress > フォーラム ≫ 特定カテゴリの「年度別」アーカイブ

あるカテゴリーの記事を対象に、年度ごとにまとめて、アーカイブとして表示させたい場合。例として、

  • 「セミナー情報」というカテゴリーの記事タイトル(+概要)を
  • 「平成23年度」分だけ一覧表示して
  • タイトルをクリックすると該当記事に飛ぶ

ということを実現したいと思います。ポイントは下記の3つです。

  1. アーカイブって言ってるけど使うのはカテゴリー用テンプレート
  2. クエリをカテゴリーで絞り込む
  3. 関数をかませて年別を年度別にする

色々調べてみましたが、専用のカテゴリーページでクエリを書いて抽出するのが一番手っとり早かったのでご紹介します。
URLもそこそこ気持ち良くなりました。

1. カテゴリー用テンプレートを作成

category-○○.php を作ります。とりあえずは公式テンプレート (Twenty ~) をコピーして名前だけ変えておけばOK。

2. カテゴリーを設定したクエリを設定

category-○○.php のコンテンツ表示部分を下記で入れ替えます。

3. 年別を年度別にする

参考:WordPress > フォーラム ≫ 年度別アーカイブは可能でしょうか?

絞り込む対象が年以外にも入ってくるので、上記を少し修正したものを function.php に仕込みました。
ちなみに特定のカテゴリーに関わらず、すべての年別表示を年度別に変換するのでご注意ください。

4. URLにアクセスする

パーマリンク設定をしてあれば、これで特定カテゴリーの年度別のアーカイブページは、

http://www.example.com/category/○○/2011/

というようなURLになります。

5. 立ちはだかる課題

1) ページ自体のタイトルが変!

「2011 | サイト名」のようになってます。SEOも関わってくるし、気になる方は header.php をゴニョってください。

2) どうやってリンクするの?

イレギュラーなURLかと思いますので、WPの関数使うより、PHPで入れ込んでしまうのが手っとり早いです。↓こんなかんじ。

WordPress3.4から、外観→テーマ で「カスタマイズ」という項目(テーマカスタマイザー)があります。Twenty Eleven では特に使いやすくて、プレビューしながら外観を決められますね。

このテーマカスタマイザーには、function.php をいじることでオリジナルの項目を追加できます。
これについては下記のサイトが参考になります。

WordPress3.4のテーマカスタマイザーで自由度の高いテーマを作ろう | webOpixel
WordPress 3.4の新機能テーマカスタマイザーの最速レビュー | firegoby
WordPressのテーマカスタマイザーで画像と色のカスタマイズを可能にする方法 | モンキーレンチ

ただ今回、私がやりたかったのはテキストエリアの追加。そしてテキストエリアはそのままでは追加できません。
フックでは対応できそうもなかったので、WPのコアスクリプトをいじらなければならないかな…と思っていましたが、PHPのクラス拡張で対応している説明記事がありました。

via: Making a custom control for the Theme Customizer » Otto on WordPress

1. customize_register にアクションフック

ここは上記のサイトでも説明されていますので、すでに作ってあれば追加で作る必要はありません。

2. WP_Customize_Control の拡張クラスを作成

管理画面以外で WP_Customize_Control を宣言してもエラーになってしまうので、 if文で囲んだほうが良いでしょう。

WP_Customize_Control を拡張したクラスを作成し、render_content() を上書きします。これは上記 function には入れなくてOK。テキストエリアを使いたい場合は、WP_Customize_Control を拡張したクラスを使用するわけです。

3. add_section + add_setting + add_control

customize_register をフックした function に、下記のようなコードを追加します。add_control では上記と同様、if文で囲んでおいたほうが良いです。

そんなわけで、ちょっといじってできたソースが以下。

こんな感じで追加されました!

4. 設定した値の表示方法

値は下記の方法で取得できます。せっかくのテキストエリアなので、改行を有効(nl2br)にしてあります。

get_theme_mod についての参考ページ:
Function Reference/get theme mod « WordPress Codex
get_theme_mod:WordPress私的マニュアル

テーマ自体をカスタマイズしてしまえば特に必要ないかもしれない機能ですが、たとえばお客様に納品する際に、ページもある程度変更したいということがありますよね。
あとは、マルチサイトでご提供する際に、幾つかのサイトで表示したい項目が異なる場合。例えば住所とか連絡先とか。フッターで使うといい感じです。

Clock

Post Expirator は、WordPress で投稿した記事やページの有効期限を設定できる、結構便利なプラグインです。

WPを構築する制作側だけでなく、構築したWPで更新するお客様側でも使うことの多いプラグインなので、日本語化ファイルを作ってみました。

追記 2013.04.03:バージョン 2.0.1 に対応しました。

ダウンロード: Post Expirator の日本語化ファイル(Version 2.0.1 用)

WPの翻訳ガイドラインには一応目を通して作りましたが、cron絡みのあたりとか、時々変な日本語や意訳しすぎじゃ?というところもあるかもしれませんので、お気づきの方は @mekemoke にご指摘いただけるとありがたいです。

追記:
ちなみに、9時間ずれちゃうよーって方は、

を function.php の先頭に入れるだけで解決します。

さらに追記:
コメントをいただいたとおり、WordPress が UTC を推奨している以上、date_default_timezone_set を安易に使うべきではないようです。上記が一番手っとり早い解決方法で、個人的には問題が起きていないのですが、慎重に対応する必要がありますね。じゃあどうすればいいのかという答えが見つかっていないので、あくまで暫定措置として。
参考:WordPress › フォーラム » WP-Cronが9時間遅れる

First Day: calendar

スマートフォン用画面を作るのに便利なjQuery Mobile。日付選択用のプラグインがリニューアルしたようで、現在稼働するのはこっちの方。

jQueryMobile – DateBox Demos

カレンダー形式を使用したい場合は、jQuery、jQM(1.0.1以上)、あとはコアファイルと使いたいモードのjsを読み込む。CSSも必須です。

jqm-datebox.ja.js は日本語に変換したもの。(後述)
あとは下記のように設定してあげれば動きます。

type=”date” と data-role=”datebox” と data-options=’{“mode”:”calbox”}’ は必須。(data-optionsを入れないとエラーが出て怒られました)

valueには初期値を入れてあげれば良いのですが、dateFormat で設定した型に沿うように指定する必要があります。

日本語用ファイルは個人的に設定したかったので、諸々参考にしつつ下記のようにしました。

これで万事解決~♪と思いきや、日付選択用カレンダーのヘッダは headerFormat が無視されます。それもそのはず、日付選択の場合、ヘッダに日付が入っていたら変だから。

ここまできて「7月 2012」とかいう文字が許せなかったので、headerFormatCal: “%Y年%B”, というのを追加して、jqm-datebox.mode.calbox.min.js の該当箇所をカスタマイズしました。

旧)

新)

これで 2012年7月 という表記になりました。めでたしめでたし。

(以下追記)

1.タップエリアを広げたい

ボタンをタップしないとカレンダーが開かないので、入力欄(readonly 設定してあるので入力できないけど)を全体をタップすると開くようにする。

data-options に “useFocus”:true を追加設定すればOK。イベントのトリガーはタップ(クリック)というよりフォーカスなんだね。

2.テーマを変えたい

日本語化ファイルで適用できなかったので、アレー?と思っていたら、これも data-options での設定でした。

“themeDate”:”b” などと追加設定すればOK。ただ、幾つかに項目が分かれているので、それぞれ設定してあげる必要があります。詳細はjQueryMobile – DateBox Options を参照。