fancyboxがIEで効かないときの対処法

by fujii | 8 月 2nd, 2012 

ボタンをクリックするとあるphpをポップアップで表示・・・という動作を実装するためにfancyboxを使ったんですが、なぜかIEで表示されない。
Chromeは全然いけるんですが、IEは8以下だとどのバージョンもさっぱりです。

ググると
1.IE用の画像のパスを修正する
2.オプションの最後にカンマを付けないようにする

などなどいくつかの解決策が出てきたんですが、どれを試してもダメでした。

ただ、これまでの案件でできてるので絶対できるはず・・・・と思って過去のソースを漁ったら、解決策が見つかりました。

【第3の解決策】
typeでiframeを明示的に指定する

つまり
$(”.thumb”).fancybox();
だと動かないけど
$(”.thumb”).fancybox({ ‘type’ : ‘iframe’ });
だと動くってことです。

ただiframeだとinlineとかのように高さを自動で調節してくれないので、使うのはIEだけにしたほうがよさそうですね。
そのへんはIE判別のスクリプトとか使って、使い分ける感じで。

1つ疑問なのは、inlineでもIEで動く場合があるってこと。
何か条件が整うとiframe以外動かなくなるっぽいんですが、その条件が不明です。

Comments Off

Wordpressでpage-スラッグ名.phpのテンプレートが適用されない

by fujii | 7 月 11th, 2012 

本番サーバーで動いてるテンプレートをテストサーバーに移し替えて修正しようとしたら、なぜかテンプレートが適用されない。
パーマリンク設定とかいろいろいじってみても全く変わらず困っていたところ、重要なことに気が付いた。

テストサーバーのwordpressのバージョン、2.8系じゃねーか・・・・。

そりゃーテンプレート動かないわ。
テストサーバーの仕様が古すぎて3.0以降のが入らなかったので別のサーバーで動作させるということで落着。
マジうちのサーバー古いって。どうにかしようぜ。

Comments Off

mod_rewriteでの携帯サイト振り分けがうまくいかない

by fujii | 6 月 20th, 2012 

mod_rewriteでつまづいたのでメモ。

携帯アクセスの時だけ別ディレクトリに飛ばしたくて以下のように書いたんですが、どうもうまく動かない。

RewriteCond %{HTTP_USER_AGENT} DoCoMo [OR]
RewriteCond %{HTTP_USER_AGENT} J-PHONE [OR]
RewriteCond %{HTTP_USER_AGENT} Vodafone [OR]
RewriteCond %{HTTP_USER_AGENT} SoftBank [OR]
RewriteCond %{HTTP_USER_AGENT} WILLCOM [OR]
RewriteCond %{HTTP_USER_AGENT} DDIPOCKET [OR]
RewriteCond %{HTTP_USER_AGENT} UP.Browser
RewriteRule ^$ http://なんとか/m/ [R]

何がおかしいんだろうと思って見てみたら、wordpressから吐き出された以下のコードが邪魔していました。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

このルールが携帯のルールよりも前に書いてあればいいんですが、携帯ルールを先に書いてしまうと不具合が起こります。
まず先に携帯ルールに沿って http://なんとか/m/index.php に飛ばされますが、その後wordpressルールによってindex.phpというファイルへのアクセスは全てベースディレクトリ下のindex.phpへと飛ばされます。
つまり、http://なんとか/m/index.php に飛ばしてたつもりがwordpressルールのせいで http://なんとか/index.php になってしまっていたということです。
wordpressルールを先に書けば、携帯ルール適用後に飛ばされることが無くなるのでこの問題は解決します。

Comments Off

wordpressの記事で「先頭に固定表示」を有効にする

by fujii | 6 月 5th, 2012 

自分でブログやってるときはこんな機能全く使わないんですが、仕事で問い合わせが来てしまったので調べざるを得なくなりました。
調べてみると、この機能はindex.phpで表示されるループでしか反映されないようです。(デフォルトテーマでは)
またindex.phpに書いたとしても、get_postsやquery_postsを自分で書いただけでは反映されない。

でも表示したい!という要望があったので以下の記事を参考に改造してみました。

サイドバーなどの記事一覧で先頭固定を有効にする

詳細はまあ書いてある通りなんですが、1つだけ問題が。
トップページには固定記事も含めて3件だけ表示したかったんですが、そのままコピペするとうまく表示されないです。

具体的には、
固定記事が設定されているときはそれらだけが表示され、固定でないものは表示されない
固定記事が1つも設定されてないとなぜかループが連続し、3件以上表示される

記事の問題なのかスクリプトの問題なのかは分からなかったのですが、とりあえず以下の方法で解決しました。

<?php
// 取得したい件数を指定する
$list_count = 3;

// まずは先頭固定記事のみを取得する
$q_parm = array(
‘post_type’=>’post’,
‘category_name’=>’hoge’, //特定カテゴリの記事を取得
‘posts_per_page’=>$list_count,
‘post__in’ => get_option(’sticky_posts’)
);

$wp_query = new WP_Query($q_parm);

//取得できた件数
$getnum = $wp_query->found_posts;

if (have_posts()) :
while (have_posts()) :
the_post();
//ここに表示部分を記述
endwhile;
endif;
?>

<?php
//先頭表示が3件未満の時のみ表示
if( $getnum < 3 ){
$list_count = $list_count - $getnum;
// 続いて先頭固定記事以外を取得する
$q_parm = array(
'post_type'=>‘post’,
‘category_name’=>’info’,
‘posts_per_page’=>$list_count,
‘post__not_in’ => get_option(’sticky_posts’)
);

$wp_query = new WP_Query($q_parm);
if (have_posts()) :
while (have_posts()) :
the_post();
//ここに表示部分を記述
endwhile;
endif;
}
?>

単純に、表示すべき総数から固定記事の数を引いて、残りの数だけ通常記事のリクエストを行っています。
コードは冗長ですがとりあえず一番分かりやすい方法として。

Comments Off

wordpressでのOGP設定最適化

by fujii | 6 月 1st, 2012 

作ってたサイトで、モロに以下のサイトのような問題が起きました。

Facebookのいいね数がおかしい・シェアしてもトップページのURLしか出てこないバグの対処法

なので、これらの記事を参考にOGPを最適化。

WordPressでFacebookのいいね!ボタンを不具合無く設置する際のポイント

WordPressで、OGP(The Open Graph Protocol)に完全な情報を反映させる

結果のコードはコレ。

<?php
$post_id = get_the_ID();
$post = get_post($post_id);
$content = $post->post_content;
$content = apply_filters(’the_content’, $content);
$content = strip_tags($content);
$content = str_replace(” “, “”, $content);
$content = str_replace(” ”, “”, $content);
$content = mb_strimwidth($content, 0, 200, “…”);
?>

<meta property=”fb:app_id” content=”アプリID”>
<meta property=”og:title” content=”<?php the_title(); ?>”>
<meta property=”og:type” content=”blog”>
<meta property=”og:url” content=”<?php the_permalink(); ?>”>
<meta property=”og:description” content=”<?php echo $content; ?>”>
<meta property=”og:site_name” content=”<?php bloginfo(’name’); ?>”>
<?php
$str = $post->post_content;
$searchPattern = ‘/<img.*?src=(["\'])(.+?)\1.*?>/i’;
if ( preg_match( $searchPattern, $str, $imgurl ) ) {
echo ‘<meta property=”og:image” content=”‘.$imgurl[2].’”>’;
} else {
echo ‘<meta property=”og:image” content=”代替画像のパス”>’;
};
?>

facebookめんどくせーなー。
こういう仕様がよく分からなかったり複雑なサービスって仕事で使いたくないわー。

Comments Off

jqueryのajaxでdataを複数渡したい場合

by fujii | 6 月 1st, 2012 

var data = { value1 : $(’#hoge’).val(), value2 : $(’#fuga’).val() };

と値を複数入れた後、

$.ajax({
type: “POST”,
url: “sample.php”,
data: data
});

という感じで渡します。
受け取る画面(この場合sample.php)では

$_POST['value1']
$_POST['value2']

でそれぞれ値を受け取れます。

Comments Off

fancyboxでiframeのスクロールバーが表示されない

by fujii | 5 月 25th, 2012 

タイトル通り、fancyboxで別ページをiframeで読み込んだところ、スクロールバーが表示されませんでした。
ただし、iPhone/iPad限定の現象です。PCブラウザは大丈夫です。

解決策がないものかいろいろ調べてみたんですが、どうやらないようです。
iframe scrolling on iOS device

モバイルsafariのバグなので表示できないとか。困る。
とりあえず今回は諦めましたが、そのうち解決してくれないかなー。

Comments Off

brabioで「完了」ステータスが利用できない

by fujii | 5 月 24th, 2012 

brabioはプロジェクト管理ツールなのに、タスクの「完了」が選択できないって致命的です。
完了してるのに「完了」にできないもんだからシステム上は「遅れ」と判断され、見た目上はすごい失敗プロジェクトみたく見えてしまいます。

さすがにこれはどう考えてもおかしいのでいろいろと設定を変えてみてたんですが、プロジェクト設定を「本運用」のステータスにすると使えるようです。
「本運用」の前にどんなステータスだったか忘れましたが、確か「計画中」とかだったかな・・・。そりゃ完了ステータスなんてないわ。

ss

Comments Off

mb_convert_kanaが効かない

by fujii | 5 月 24th, 2012 

全角英数を半角英数に変換したかったのでmb_convert_kana関数を使ってみました。
が、どうにもうまく変換されない。

しばらく書き方をいろいろと試しているうちに、「エンコードを指定しないといけない」ということが原因だと分かりました。
第三引数にエンコードを指定する。つまり、

$str = mb_convert_kana( $str, ‘a’, ‘UTF-8′ );

と書けば良かったわけです。
これでちゃんと動きました。

元々 mbstring.internal_encoding でエンコードを指定していればこの第三引数はいらないらしいですが、今回は指定してなかったのでコレ抜きでは動かなかったということになります。

めんどくさいね!

Comments Off

wp_head()を入れた時に入る上部マージンを消したい

by fujii | 5 月 22nd, 2012 

どういうのかって言うと、こういうのです。

frame

こんな余計なのが入ると非常に不愉快。
ということで速攻消すことにしました。

wp-includes内のadmin-bar.php、309行目あたりに以下のような部分があります。

function _admin_bar_bump_cb() { ?>
<style type=”text/css”>
html { margin-top: 28px !important; }
* html body { margin-top: 28px !important; }
</style>
<?php
}

このstyleの部分をそっくり消して、以下のようにすればOK。

function _admin_bar_bump_cb() { ?>
<?php
}

Comments Off

WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera