youtube動画のurlを張り付けるだけでサイトに動画を表示できるwordpressだが、SafariやIEなどのブラウザでは、lightboxでポップアップした画像にyoutube動画が覆いかぶさってしまう。
解決には、ヘッダにでも以下をぶち込む。
<script type="text/javascript"> jQuery(function($){ $('iframe').each(function(){ $(this).attr('src',$(this).attr('src')+'&wmode=transparent'); }); }); </script>
とても便利なスライダープラグインWP-Cycleですが、IE8以下ではpng画像が透過しません。(ver.0.1.13現在)
■解決策■
こちらで、
「wp-cycle.phpの438から446行を書き換えればいいのさHAHA」
と書かれてます。
具体的には以下。
jQuery(document).ready(function($) { $("#<?php echo $wp_cycle_settings['div']; ?>").cycle({ fx: '<?php echo $wp_cycle_settings['effect']; ?>', timeout: <?php echo ($wp_cycle_settings['delay'] * 1000); ?>, speed: <?php echo ($wp_cycle_settings['duration'] * 1000); ?>, pause: 1, fit: 1 }); });
を、
jQuery(document).ready(function($) { $("#<?php echo $wp_cycle_settings['div']; ?>").cycle({ fx: '<?php echo $wp_cycle_settings['effect']; ?>', timeout: <?php echo ($wp_cycle_settings['delay'] * 1000); ?>, speed: <?php echo ($wp_cycle_settings['duration'] * 1000); ?>, cleartypeNoBg: true }); });
に書き換え。具体的には最後の2項目「pause: 1,fit: 1」を「cleartypeNoBg: true」に置き換えたらOK。
※最終Updateが去年の8月だけど、もしアップデートしたらこの部分を再度修正しないといけない。
これで背景は透過したかに見えたんだけど、今度はフェードの時に透過画像の縁にへんな黒いノイズがのってしまう。
なので今度はVIVID Labs.さんから知恵を拝借、IE用のフィルタ・AlphaImageLoaderを使用して回避する。
<!--[if lte IE 8 ]> <script language="javascript"> jQuery(function() { if(navigator.userAgent.indexOf("MSIE") != -1) { jQuery('img').each(function() { if(jQuery(this).attr('src').indexOf('.png') != -1) { jQuery(this).css({ 'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + jQuery(this).attr('src') + '", sizingMethod="scale");' }); } }); } }); </script> <![endif]-->
WP-Cycleのタグ直後にでも、「IE8以下だったらこのフィルタをpng画像に適用する」と指定。
wordpressなので$をjQueryに変更しています。
これでIEでも(多少ジャギるけど)透過でフェード表示させることが出来ました。
wordpress3.1からカスタム投稿タイプを設定する時に、register_post_typeに「'has_archive' => true」を設定する事で、カスタム投稿用のアーカイブページがスラッグ名で作れるようになってる。
そして最近は「pre_get_posts」「is_main_query」を使って、メインのループを
「テンプレートがスッキリ綺麗」
&
「クエリ数が減らして速度UP」
なんて書き方がクールだとかなんとか。
ちなみに「カスタム投稿のアーカイブページ」を分岐するのには
is_post_type_archive('投稿タイプ名')
を使う。
function main_loop_check( $wp_query ) { if ($wp_query->is_main_query() && is_post_type_archive('movie')) { $wp_query->set('posts_per_page','10'); $wp_query->set('order','ASC'); } } add_action( 'pre_get_posts', 'main_loop_check' );
とすると、投稿タイプ「movie」
のアーカイブテンプレートは
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <h2><?php the_title();?></h2> <?php the_content(); ?> <?php endwhile; endif; ?>
とquery_postsなど書かなくても反映される。
素敵。
wp_mail()を使って簡単にメールフォームを作ろうと思ったら、ヘッダの引数にBccを指定した途端に届かない!Ccには届く!という摩訶不思議な現象に困った。
wp_mail()の基本設定(公式リファレンス)
$to = 'mail@mail.com'; $subject = 'タイトル'; $headers[] = 'From: 送信元名前 <sousinmoto@mail.com>'; $headers[] = 'Cc: Cc宛先<ccatesaki@gmail.com>'; $headers[] = 'Bcc: Bcc宛先<bccatesaki@gmail.com>'; $message = '本文' wp_mail($to,$subject,$message,$headers);
と書けば送信先、Cc、Bccを含んだメール送信が可能なわけだ。簡単。
Ccとかいらね!って場合は第4引数(アタッチメント、この場合はヘッダ)を除いたらいい。
単に送信先を複数にしたければ、
$to = array('mail@mail.com','second-mail@mail.com');
と配列にすればOK。
とにかくシンプルに!って時はソースに
wp_mail('mail@mail.com','タイトル','本文');
これ書くで届く。素晴らしい。
で、何故か自分の環境ではBccだけが届かない。
おかしいな?と調べたところ、Gmailでは送信先とBccを同じGmail受信ボックスで受信した場合、重複を防ぐためかBccをPopしないようだ。
つまり僕は、同じGmailアカウントで2つのメール、「mail@mail.com」「bccatesaki@gmail.com」を受信していたので、mail@mail.comだけが受信された形になっていた。
なので、試しにBccのみGmailアカウントで受信してみたら、「非公開の受信者宛」という宛先でこのメールが届いた。(Googleに詳細)
送信テストする時は注意しないとね。
ブックマーク先が消えてたので、慌ててキャッシュからメモっておく。
wordpressの携帯用ページでリダイレクトする方法は…
$_SERVER["REQUEST_URI"] = "/request-send";
と、REQUEST_URI を飛ばしたいURIに書き換える。
これを書き換えるタイミングを送信直前のフック「wpcf7_before_send_mail」で行うため、finction.phpに書くではなく、自作のプラグインを作って以下を記述。
add_action( 'wpcf7_before_send_mail', 'my_conversion' ); function my_conversion( $cf7 ) { // 申し込みフォームIDによって飛ばすページを振り分けたいならIDをチェック if( $cf7->id == 1 ) { $_SERVER["REQUEST_URI"] = "/request-send"; } }
申し込みフォームIDは contact form 7 のタグが
[contact-form 1 "フォーム"]
(カッコを全角に変更してます)となっていればIDは1だ、そうで。