タグに紐づいている記事一覧をショートコードで出す(v4.6.1)
「タグの一覧」ではなく「タグに紐づいている記事一覧」。関連記事一覧ですな。
参考:http://zero.edition.jp/archives/207
ただし、いろいろと動かなかったので、最終的には変えています。
functions.php
function tag_article_list( $atts) { extract( shortcode_atts( array( 'mytag' => '', ), $atts)); $mytags = get_term_by('name', $mytag, 'post_tag'); $mytag_id = $mytags->term_id; $args = array( 'tag_id' => $mytag_id, 'posts_per_page' => -1, 'post_type' => 'post', 'orderby' => 'date', 'order' => 'DESC' ); if($mytag_id){ $my_query = new WP_Query($args); if($my_query->have_posts() ){ $html = ''; $html .= '<dl class="dl_actlist">' . "\n"; while ($my_query->have_posts() ){ $my_query->the_post(); $html .= '<dt>' . esc_html( get_the_date() ) . '</dt>' . "\n"; $html .= '<dd><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></dd>' . "\n"; } $html .= '</dl>' . "\n"; } wp_reset_postdata(); return $html; } } add_shortcode('taglist', 'tag_article_list');
1.ショートコードに記述のタグを読み取る
2.タグ名からタグのIDを引っ張る
3.ループ作成
4.出力
参考と変えているのは、複数のタグに非対応にしたこと(実装時にはひとつで十分だったので)、タグIDで引っ張る形にしたこと。あと、get_template_partでループ内を記述するのではなく、$htmlに入れる形にしたこと。
変数に入れてreturnで出力する形にしたのには理由があって、変数での記述でないと、出力がなぜか固定ページの本文よりも上に出力されるので。ショートコードを記述したところに出したいのに、無関係にトップに出されると困る。
ショートコードの呼び出しは[taglist mytag="タグ名"]みたいな形で、タグ名をmytagに入れる形。日本語可。
追記:該当するタグ名がなかった場合、全クエリが表示されたため、タグIDがあった場合のみループさせるように修正。
簡単アニメーション
ワンポイントで見出しをフェードインさせたいときなんかに。
作ればいいのでしょうが、まぁワンポイント程度だと作り込むのは面倒くさい。
参考:http://qiita.com/stkdev/items/62c9f55500eff729fe4a
CSSをダウンロードして、クラスを指定する。
ディレーションとかそのあたりは、適宜上書きしていく感じで。
中身は、animation-durationとかanimation-nameとか対応するkeyframesとかその辺のセット。
Lightbox系?モーダルウィンドウとか
レスポンシブ対応だそうです。実際に使ったときは、モックアップ的なやつなのでレスポンシブ関係ねえ!でしたが、まぁ今後使うこともあるかもしれないので。
参考:http://blog.8bit.co.jp/?p=14459
参考:http://kwski.net/jquery/1201/
DL:https://github.com/FormstoneClassic/Boxer
Boxerというそうで。画像だけでなく、動画、コンテンツも使えるみたいなので。
ちなみに参考サイトにはありませんでしたが、実装に際してはjQueryプラグインですので、
<script type="text/javascript"> $(".boxer").boxer({ }); </script>
の記入が必要です。気づかず苦戦しましたが…。
2016年11月現在からは2年以上前のプラグインなので、もしかしたらそろそろ消える系かもしれない。そういう意味ではちょっと要注意ではある。
無料設定していないのに送料が無料になる(ver.2.13)
2万円以下は送料無料と管理画面で設定しているのに、なぜか購入金額1万円でも送料が無料となるパターンが発生。
あれこれ試してみた結果、注文時の購入商品が14種類だとセーフ、15種類だとアウトと判明。(個数は関係ない)
どうも、大量購入→セッションデータが保存しきれない→/(^o^)\ となるらしいです。
参考:http://itoben.com/blog/1291.html
PHPMyAdminでセッションのデータ型を変更すれば、きちんと保存できる→送料無料になったりしない、ということで処理してみました。
具体的には、dtb_sessionテーブルのsess_dataフィールドをTEXTからLONGTEXTに変更すると良いようです。
実際に送料無料が発生しなくなったので、これで間違いないかと。
Transmit Mail.ver2のカスタマイズ
入力内容によって送信先などを変更するカスタマイズ。
実際にやったのは、返信メールのテンプレートを変更するということですが、参考にしたのは送信先の変更です。あまり変わりはないですが。
参考:http://qiita.com/dounokouno/items/21dcf87f2e43a73be551
実際にやったことは、ほぼこの通りです。
1.input.htmlに普通にラジオボタンを入れる
<dt>ご指定<span class="color_1">※</span></dt> <dd><input type="radio" name="ご指定" value="文面A" id="radio1" {$checked.ご指定.文面A} {$checked.default} />文面A<br /> <input type="radio" name="ご指定" value="文面B" id="radio2" {$checked.ご指定.文面B} />文面B</dd>
2.config/config.phpに以下追記する
$config['mail_body_a'] = 'config/mail_body1.txt'; $config['mail_body_b'] = 'config/mail_body2.txt'; $config['mail_auto_reply_body_a'] = 'config/mail_auto_reply_body1.txt'; $config['mail_auto_reply_body_b'] = 'config/mail_auto_reply_body2.txt';
メールテンプレートは、configファイルからではなく、lib/transmitmail.phpからの位置を記述することになるので注意。
つまるところ、transmitmail.php内にあるデフォルトの指定に沿ったフォーマットにするということ。
3.libディレクトリにexTransmitMail.phpを作成する
<?php class exTransmitMail extends TransmitMail { public function afterSetTemplateProperty() { if ($this->page_name === 'finish') { switch ($this->post['ご指定']) { case '文面A': $this->config['mail_body'] = $this->config['mail_body_a']; $this->config['mail_auto_reply_body'] = $this->config['mail_auto_reply_body_a']; break; default: $this->config['mail_body'] = $this->config['mail_body_b']; $this->config['mail_auto_reply_body'] = $this->config['mail_auto_reply_body_b']; break; } } }
switchで振り分けているので、ラジオボタンがふたつ以上あっても問題ない。
今回はcheckedであらかじめ何かの値が入っている状態にしているが、switch defaultで「何も値が入っていない」状態でも問題ない形にすることはできる。
3.index.phpを修正する
require_once 'lib/TransmitMail.php'; require_once 'lib/exTransmitMail.php'; $tm = new exTransmitMail('config/config.php'); $tm->run();
以上。
ajaxzip3のカスタマイズ
同じサイトで使っている他フォームとの整合性の問題で、
・入力した時点で住所を出すのではなく、検索ボタンを押すと住所が自動入力される
・存在しない郵便番号の場合は、アラートを出す
で、最終的にこうなった。
<script type="text/javascript"> $(".post-btn").click(function() { $("#address1").val(''); $("#address2").val(''); AjaxZip3.zip2addr('郵便番号', '', '都道府県', 'ご住所'); setTimeout(function(){ if($("#address1").val() == ''){ alert('該当する住所が見つかりませんでした。'); }; }, 2000); }); </script>
入力部分はこんな感じ
<dt>郵便番号</dt> <dd><input type="text" name="郵便番号" value="{$郵便番号}" class="form_text" id="postcode" /> 例)123-4567 <input type="button" value="検索" class="post-btn" /></dd> <dt>都道府県<span class="color_1">※</span></dt> <dd><input type="text" name="都道府県" value="{$都道府県}" class="form_text" id="address1" /></dd> <dt>ご住所<span class="color_1">※</span></dt> <dd><input type="text" name="ご住所" value="{$ご住所}" class="form_text" id="address2" /></dd>
setTimeoutでアラートを出すタイミングを遅らせているのは、これがないとスクリプトの動作として住所を入力する前にチェックが走ってしまい、住所が入力されたのに「見つからなかった」と警告が出るためです。
ちなみに、使ったフォームはTransmit Mailでした。