Share on FacebookTweet about this on TwitterShare on Google+

このコンテンツは WordCamp Kobe2013 の
sneak idea show「コンテンツやデザインを実現するための事例集」の
セッションの時間で説明できなかった内容を補足するための資料です。

プラグイン:Easy Timer

http://wordpress.org/plugins/easy-timer/

キャンペーンなどでURLは先に決まっていて印刷物などに掲載しないといけない場合や、すでに公開済みのページの一部を時間指定で置き換えて欲しい、もしくは置き換えたいという要求仕様の時などに使えます。

Easy Timerはもともとカウントダウンやカウントアップを実現できるプラグイン。
「公開まであと○○日」ということが可能。
詳しい使い方は下記を参照。
http://www.kleor-editions.com/easy-timer/en/

ショートコードで「もし何日の何時を過ぎたら」という要求が以下のように実現できる。

このたび○○の新商品を発売するにいたり、キャンペーンを開始いたします。
[countdown date=2013/06/07-00:00:00]
6月7日0時より受付開始します。
[after]
申し込みはコチラ
[/countdown]

実際の編集画面で見ると

のようになります。PHPが書ける人にとってはif〜elseでなんの事はない処理ですが、自分で作られる方もこのようにショートコードにすることで、後で見ても明解であり、クライアントでも更新が可能になるメリットがありますよね。

ショートコードをネストすることで「何日の何時から、何日の何時まで」という要求が以下のように実現できる
このたび○○の新商品を発売するにいたり、キャンペーンを開始いたします。
※応募締め切り6月8日。
[countdown date=2013/06/05-00:00:00]
6月7日0時より受付開始します。
[after]
[countdown2 date=2013/06/09-00:00:00]
申し込みはコチラ
[after]
たくさんのご応募ありがとうございました。
[/countdown2]
[/countdown]

もちろん開始までの日時をカウントダウンさせることも可能です。

プラグイン:Limit Login Attempts

http://wordpress.org/plugins/limit-login-attempts/

IP アドレス毎のログインの試行回数を制限します。
ブルートフォース攻撃対策に、これだけで万全というわけではありませんがインストールしてデフォルトのままでもそこそこの効果が見込めます。

allowed retries:ログインの試行回数
minutes lockout:試行回数以上失敗した際にアクセス制限する時間
[ B ] lockouts increase lockout time to [ A ] hours
A時間を基準としてロックされたB回数をリセット
hours until retries are reset:試行回数のリセットする時間

あとは細かくわからない方は、デフォルトでもいいです。
リバースプロキシなどを使っている場合はSite connectionを設定を確認ください。

プラグイン:Posts 2 Posts

http://wordpress.org/plugins/posts-to-posts/

異なる投稿タイプを双方向に関連付け(リレーション)させる。
ひとつのポストから複数のポストへ一方向の関連付けは、Advanced Custom FieldやMagic Field 2などのカスタムフールド系のプラグインでも可能。

ただ双方向の関連づけを可能にするのがPosts 2 Posts。
例)
作家 – 作品
選手 – チーム
など、双方から複数の関連付けが必要な場合。

基本的な使い方は
https://github.com/scribu/wp-posts-to-posts/wiki
Basic usageを参照

例)選手のカスタムポストタイプをplayer、チームのカスタムポストタイプをclubとすると、function.phpに以下のように記述。

function my_connection_types() {
p2p_register_connection_type( array(
'name' => 'player_to_club', //名前任意
'from' => 'player', //投稿タイプ名
'to' => 'club' //投稿タイプ名
) );
}
add_action( 'p2p_init', 'my_connection_types' );

上記のコードを実行すると、各投稿ポストに関連づけたい投稿を選択するインターフェイスが編集画面に追加されます。

現在のページに関連付けられている投稿を取得
各投稿データで関連づけられた投稿のリストを取得するには以下のように先に設定した connected_typeをqueryに追加します。

$connected = new WP_Query( array(
'connected_type' => 'player_to_club',
'connected_items' => get_queried_object(),
'nopaging' => true,
));

設定にコードが必要ですが
管理画面の両方のカスタムポストタイプの入力画面から選択可能なため、設定すれば使いやすいツールになります。ここではカスタムポストタイプ同時をリレーションさせていますが、固定ページや投稿ページも対象として連携できます。

プラグイン:Magics Field 2

http://wordpress.org/plugins/magic-fields-2/

要素がいくつになるか分からない項目をカスタムフィールドで追加
※Advanced Custom Fieldでも有料プラグインで可能

使い方の詳細は
http://wiki.magicfields.org/doku.php
で確認

カスタムフィールドをグループ化し、そのグループ単位でも個別のフィールド単位でも
複製可能なフィールドに設定できる。
“Can be duplicated”をオンにすると複製可能にできます。

フィールドの値はフィールド名がpriceとすると<?php echo get(‘price’); ?>で取得できる。
画像を取得するget_image()、サウンドデータを取得するget_auido()などの関数があります。

複製したフィールドのデータはget_field()で配列で取得できます。

<?php
$photos = get_field('photos');
foreach($photos as $p){
?>
<img src="<?php echo $p["original"];?>">
<?php } ?>

いくつかのフィールドをグループにできます。そしてまたグループ自体を複製可能に指定できます。例えば選手の在籍といったようないくつかのフィールドで構成されたフィールドグループを作ります。

このグループを“Can be duplicated”をオンにすると「Add Another」でこのグループを複製できます。

この選手の在籍履歴のように、数個の在籍履歴と数十個の在籍履歴が存在するようなコンテンツを管理するのに有効です。

グループを取得するget_group() ではグループに設定したフィールドが配列で取得できる。
複製可能なグループの場合は、それがさらに配列で取得できます。

Query:階層構造をもった投稿を表示

投稿コンテンツを段階的に表示する。カスタム投稿タイプなどでも、「親・子」の階層構造を指定できるが各ページでの表記の使い方は

一覧などで親が存在するポストを表示しない、つまり下位コンテンツは表示しない
追加クエリー

詳しくはこちらの「Testing for sub-Pages 」に例文が掲載されています。
http://codex.wordpress.org/Conditional_Tags

■pre_get_posts

$query->set( 'post_parent', '0' );

■WP_Query,get_posts

$args = array('post_parent' => 0);

シングルページで現在のポストに子ポストがあるかどうかを調べるための追加クエリー
この結果が0であれば子ポストが存在せずに当該ページが最下層である。

■pre_get_posts

$query->set( 'child_of', 'ページID' );

■WP_Query,get_posts

$args = array('child_of' => ページID);

この構造を使うとカスタム投稿やカテゴリーなどでも階層構造を何段階も持つコンテンツが構築できる。

jQuery: PageSlideで開閉メニュー

jQueryのプラグインPageSlideを使ってスマホに見られるサイドから開閉するメニュー
詳細は下記ページで参照
http://srobbin.com/jquery-plugins/pageslide/

スライドさせるメインブロックの幅を%指定にしているとスライドせずに縮小してしまいます。レスポンシブ対応の場合、ページリサイズに合わせて固定幅を入れるとスライドされます。