タグ: plugin

Facebook

Facebook直々に作成されたプラグイン。
とにかく、設置がえらい面倒。

Facebookデベロッパにユーザー登録しなきゃいけない。
自分のような人種が登録するのは仕方がないとして、クライアントさんのアカウントでデベロッパ登録しなきゃいけないのはいかがなものかと。
さらにユーザー情報が足りないと称して携帯のアドレスかクレジットカード番号を要求w
出会い系サイトにクレジットカード登録する勇気はない。

日本語の説明不十分すぎる。
デベロッパページの中なので仕方ないとは思うけど、新しいアプリを作成以降はほぼ英語w
こんなページにクライアントのアカウントで来させるんじゃねーよw

さらに意味不明な機械翻訳の日本語。
キャンバスページとキャンバスURLって、この文言だけ見て何を指しているのか説明できる人間はいないよ。
そしてカーソル合わせて出てくるのは英語のヘルプw

ここまでやらせて出来ることはwordpressの投稿・固定ページ・コメントをFacebook側のアクティビティログに表示できる。
あれ?これだけ?
Facebookのタイムライン投稿をwordpressに自動投稿とかないの?

WordPress Social Ring

WordPress Social Ringで、Twitterの「ツィート」ボタンやFacebookの「いいね」ボタンをお手軽に設置することができる。
対応しているのはTwitter、Facebook、Google+、LinkedIn、Pin It、StumbleUponあたり。
iFrameで持ってきているようで、ボタンのデザインとかそのあたりは変更できない。
とりあえずソーシャル系のリンクを設置しておきたいというときのために。

何事も自分の気に入るようにやるには自分で作るのが一番いいということで。

ちなみにこれは「だから私を見て!フォローして!」ボタンではない。
プラグインはそっちのほうがたくさんあるね。

PHP Exec

記事中に書かれたPHPスクリプトを実行できるようにします。
wordpress.comには無いので Priyadi’s Place からダウンロードします。

あとはHTML表示で

<phpcode>
<?php
echo "Now : ".date("Y/m/d H:i:s");
?>
</phpcode>

という具合に<phpcode></phpcode>で囲んでコードを書き込めばOK。

Now : 2024/03/19 06:19:15
↑こんなカンジ。

注意点としてはプラグインのせいじゃないけど、
編集画面のビジュアル表示とHTML表示を行き来すると、PHPコードがコメントアウト変換されたりするのでコード付きの記事を編集する時はHTML表示一択で。

F2 Tag Cloud Widget

F2 Tag Cloud Widgetで、Widgetに表示しているフォントの大きさや数、表示形式をカスタマイズできます。

機能豊富だなぁと思っていたのですが、タグが付けられているコンテンツ数をカウントすることが出来なかった。
同じことが全て可能で、かつコンテンツ数のカウントを付けられるBetter Tag Cloudを採用することに。

Flexible Accordion

とりあえず2つ目を作ってみました。
今は単なるトグルスイッチの集まりだけど、お互いをリレーションさせることでアコーディオンっぽくもできる。
そんなようなプラグインを目指してます。

ダウンロード

flexible-accordion-0.2.zip

インストール

解凍してpluginsディレクトリにコピーしてください。

使用方法

トグルのスイッチになるテキストを[ fa_title ]で、開閉したい部分を[ fa_content ]で囲んでください。
複数設置することができますが、[ fa_title ] と [ fa_content ] を関連付けるためにそれぞれに同じ[ name ]をつけてください。
[ name ]を省略すると上から順番に対応づけようとします。
すべてのアコーディオンを開閉するスイッチが欲しい場合は[ fa_switch ]を設置してください。

使用例

  • アコーディオン本体
    • パターン1
      一つのタイトルとテキストをトグルしてみる。
      [ fa_title name=hoe ] hoehoe [ /fa_title ]
      [ fa_content name=hoe ] hoehoe の 中身だよ [ /fa_content ]

      hoehoe
    • パターン2
      デフォルトでテキスト部分を開示しておく
      [ fa_title name=hoe2 ] hoehoe [ /fa_title ]
      [ fa_content name=hoe2 status=open ] hoehoe の 中身だよ [ /fa_content ]

      hoehoe2
      hoehoe2 の 中身だよ
    • パターン3
      タイトル部分とテキスト部分の間に別のコンテンツを入れる
      [ fa_title name=hoe3 ] hoehoe3 [ /fa_title ]
      タイトルとテキストの間に別の文言が入っていても動作します。
      [ fa_content name=hoe3 status=open ] hoehoe3 の 中身だよ [ /fa_content ]

      hoehoe3
      タイトルとテキストの間に別の文言が入っていても動作します。
      hoehoe3 の 中身だよ
  • すべてのアコーディオンをトグルするスイッチ
    [ fa_switch ]

    ALL OPEN

更新履歴

  • 0.2(2012/09/11)
    • すべてのアコーディオンを開閉させるスイッチを追加
  • 0.1(2012/09/07) flexible-accordion-0.1.zip
    • とりあえず作成

ToDo

  • 管理画面の作成
  • CSSを改変できるようにする
  • それぞれのトグルを連携させて「どれか一つだけ開いている状態」を可能にする
  • _eで出力しているところとベタで記入しているところがごっちゃになっているので統一する
  • 併せて日本語ファイルを作成する
  • 脆弱性対応

Better Related Posts で非公開ページが検索される問題

結構気に入っているBetter Related Postsですが、非ログイン状態にもかかわらず、非公開ページを関連ページとしてリストアップしてしまうので、これを修正。

具体的には「better-related → inc → scorer.php」を2箇所書き換えます。

300行目

		WHERE ( post_status='publish' OR post_status = 'private' )

		WHERE post_status='publish'

に。

463行目

		AND ({$prefix}posts.post_status = 'publish' OR {$prefix}posts.post_status = 'private')

		AND {$prefix}posts.post_status = 'publish'

に。

post_statusでの条件を「publishとprivate」の2種類から「publish」のみに変更する、ということ。
すでに稼働している状態でこの変更を行った場合、すでに非公開ページに対するスコア生成が行われてしまっているので、設定ページの下の方にある「Data storage ID」の文字列を変更します。
デフォルト状態では「better-related-」となっているのでこれを「better-related」辺りに修正。
これで非公開ページを含まない状態でスコア生成が再度行われることになります。

ただ、関連ページスコアを事前に生成しているので、一度公開したページを非公開にした時にはこの方法では役に立たないかもしれない。時間があるときにもう少しソースを眺めてみる。

Accordion Shortcode

Accordion Shortcode というプラグイン。
[ accordions ]
[ accordion title=”title1″ ] tab content [ /accordion ]
[ accordion title=”title2″ ] another content tab [ /accordion ]
[ /accordions ]
こんなカンジで簡単にかけていいなぁと思っていたんだけど、思ったより汎用性が低かった。

Expiration Notice

とりあえず作ってみました。
「掲載期間が過ぎたものを下書きに戻す(見えなくする)」
ではなく
「掲載期間が過ぎたものは、情報が古くなっている旨の警告を出す」
プラグインです。

ダウンロード

expiration-notice.0.3.1.zip

インストール

解凍してpluginsディレクトリにコピーしてください。

使用方法

有効期限を表示したい場所に[ exp_notice ]のショートコードを書き込んでください。

設定画面

管理画面の「設定」 → 「Expiration Notice」で設定画面を開くことができます。
デフォルトの有効期限や表示するときの文言、CSSのカスタマイズができます。

使用例

  • 引数を指定しない場合
    管理画面で指定したデフォルトの期限内まで有効になります。

    • ↓ [ exp_notice ]
      このページの有効掲載期限は 2013/04/29 11:33:46 までです。
      記載されていることの正確性を確認ねがいます。
  • 引数を相対値で指定した場合
    [y, m, d, h, i, s]の各値を指定することで更新日時からの相対日時を有効期限として設定することができます。

    • ↓10年後まで有効 [ exp_notice y=10 ]
      このページの有効掲載期限は 2023/02/28 11:33:46 までです。
      記載されていることの正確性を確認ねがいます。
    • ↓10秒後まで有効 [ exp_notice s=10 ]
      このページの有効掲載期限は 2013/02/28 11:33:56 までです。
      記載されていることの正確性を確認ねがいます。
    • ↓1年1ヶ月1日 1時間1分1秒後まで有効 [ exp_notice y=1 m=1 d=1 h=1 i=1 s=1 ]
      このページの有効掲載期限は 2014/03/29 12:34:47 までです。
      記載されていることの正確性を確認ねがいます。
  • 引数を絶対日時で指定した場合
    [limit]に日時を指定することで絶対日時を有効期限として設定することができます。

    ※ 0 ~ 9 までの数字と「/(スラッシュ)」「-(マイナス)」「:(コロン)」「_(アンダーバー)」「 (スペース)」のみ使用することができます。全角文字は使用できません。
    ※「年」は4桁、「月日時分秒」は2桁で記述しなくてはなりません。
    ※日付と時刻の間にスペースを含んでいる場合、ダブルコーテーションかコーテーションで囲む必要があります。
    ※日付指定を省略した場合、自動的に更新日当日が割り当てられます。
    ※時刻指定を省略した場合、自動的に 23:59:59 が割り当てられます。
    ※以下のように記述することもできます。
    “2020-12-31 23:59:59” … 日付の区切りをスラッシュではなくハイフンで記述する
    2020-12-31_23:59:59 … 日付と時刻の区切りをスペースではなくアンダーバーで記述する
    20201231_235959 … 日付と時刻の区切りのみをアンダーバーで記述する
    20201231235959 … 日付、時刻に区切りをつけず記述する
    2022/01/01 … 日付のみを記述する
    20220101 … 日付のみを区切りをつけず記述する
    23:59:59 … 時刻のみを記述する
    235959 … 時刻のみを区切りをつけず記述する
    • ↓2020/12/31 23:59:59 まで有効 [ exp_notice limit=”2020/12/31 23:59:59″ ]
      このページの有効掲載期限は 2020/12/31 23:59:59 までです。
      記載されていることの正確性を確認ねがいます。
    • ↓2022/01/01 23:59:59 まで有効 [ exp_notice limit=2022/01/01 ] [ exp_notice limit=20220101 ]
      このページの有効掲載期限は 2022/01/01 23:59:59 までです。
      記載されていることの正確性を確認ねがいます。
    • ↓更新日当日の 23:59:59 まで有効 [ exp_notice limit=23:59:59 ] [ exp_notice limit=235959 ]
      このページは 2024/03/19 23:59:59 まで有効です。

更新履歴

ToDo

  • いつから有効、という指示もしたい。引数が2つになる点は了承済み
  • _eで出力しているところとベタで記入しているところがごっちゃになっているので統一する
  • 併せて日本語ファイルを作成する
  • 置き換えパターンのフォーマットを設定できるようにする(現状は固定フォーマット)
  • 脆弱性対応

8.CSSを適用する

この記事は 7.設定値をショートコードに反映させる の続きです。

文字だけで「このページの有効掲載期限は %target_date% までです。」とか出ても読み飛ばすのがオチなのでCSS適用して多少目立たせる工作をする。

CSSファイルを別途生成して、読みこませようとして wp_register_style関数やら wp_enqueue_style関数 のCodexを読んで書いてみたけどうまくいかない。
別ファイルの中で add_action関数とか使っても Fatal Error 。そりゃそうか。
他にうまい方法を思いつかなかったので、wp_head に直接CSSを仕込むことにする。
expirationNotice.php に以下を書き足す。

// スタイルシート読み込みのソースここから
add_action('wp_head', 'expNoticeCss');
function expNoticeCss() {
  echo '<style type="text/css">'."
<!--
.expiration {
".get_option('katz_en_ato_css')."
}
.non_expiration {
".get_option('katz_en_mae_css')."
}
 -->
</style>
";
}
// スタイルシート読み込みのソースここまで

われながら無理矢理だなぁ。
でもまぁこれで表示は
↓10年後まで有効 [ exp_notice y=10 ]

このページの有効掲載期限は 2022/08/29 13:54:13 までです。
記載されていることの正確性を確認ねがいます。

↓10秒後まで有効 [ exp_notice s=10 ]
このページの有効掲載期限は 2012/08/29 13:54:23 までです。
記載されていることの正確性を確認ねがいます。

というようになった。
とりあえずはコレで完成、かな?

7.設定値をショートコードに反映させる

この記事は 6.設定値をDBに格納する の続きです。

色々設定したので、これをショートコードに反映させたい。
今のところショートコードは与えられた値をくっつけて「HOE」と「HOE」にはさんで返す、というしょうもない機能しか持っていない。

// 実際のショートコード用のソースここから
add_shortcode('exp_notice', 'expNoticeAdd');
function expNoticeAdd($param) {
  extract(
    shortcode_atts(
      array( 'y' => '0'
            ,'m' => '0'
            ,'d' => '0'
            ,'h' => '0'
            ,'i' => '0'
            ,'s' => '0'
      )
      , $param
    )
  );
  $ret = "HOE ".$y.$m.$d.$h.$i.$s." HOE";
  return $ret;
}
// 実際のショートコード用のソースここまで

こんな。

ここから

  1. 管理画面であえて「0」を入力してくる可能性があるのでデフォルト値を「0」ではなく「ymdhis」に変更。
  2. すべて「ymdhis」だったら数値入力なしと看做して管理画面でデフォルト値として入力されている値を採用。
  3. 1箇所でも数値があれば入力ありとなって、その値に従う。入力がない部分は「0」になる。
  4. 現在日時・更新日時を取得する。
  5. 1~4で得られた値を元に有効期限を割り出す。
  6. 有効期限が現在日時を過ぎているか否かでメッセージを変更する。

このあたりを考慮してみる。

// 実際のショートコード用のソースここから
add_shortcode('exp_notice', 'expNoticeAdd');
function expNoticeAdd($param) {
  // shortcodeからの値を取得 or デフォルト値を採用
  extract(
    shortcode_atts(
      array( 'y' => 'y'
            ,'m' => 'm'
            ,'d' => 'd'
            ,'h' => 'h'
            ,'i' => 'i'
            ,'s' => 's'
      )
      , $param
    )
  );

  // ymdhis を確定させる
  // すべて「ymdhis」だったらデフォルト値を採用
  if (($y.$m.$d.$h.$i.$s) == "ymdhis") {
    $y = intval(get_option('katz_en_default_year'));
    $m = intval(get_option('katz_en_default_month'));
    $d = intval(get_option('katz_en_default_day'));
    $h = intval(get_option('katz_en_default_hour'));
    $i = intval(get_option('katz_en_default_minute'));
    $s = intval(get_option('katz_en_default_second'));
  // 「ymdhis」でなかったら指定値と0を採用
  } else {
    $y = (is_numeric($y)) ? intval($y) : 0;
    $m = (is_numeric($m)) ? intval($m) : 0;
    $d = (is_numeric($d)) ? intval($d) : 0;
    $h = (is_numeric($h)) ? intval($h) : 0;
    $i = (is_numeric($i)) ? intval($i) : 0;
    $s = (is_numeric($s)) ? intval($s) : 0;
  }

  // 該当コンテンツの更新日時を取得、分解
  $katz_en_last_modified = get_the_modified_time('Y-m-d H:i:s');
  $katz_en_last_mod = explode(" ", $katz_en_last_modified);
  $katz_en_last_mod_date = explode("-", $katz_en_last_mod[0]);
  $katz_en_last_mod_time = explode(":", $katz_en_last_mod[1]);
  // 有効期限の年月日時分秒を割り出す
  $katz_en_y = intval($katz_en_last_mod_date[0]) + $y;
  $katz_en_m = intval($katz_en_last_mod_date[1]) + $m;
  $katz_en_d = intval($katz_en_last_mod_date[2]) + $d;
  $katz_en_h = intval($katz_en_last_mod_time[0]) + $h;
  $katz_en_i = intval($katz_en_last_mod_time[1]) + $i;
  $katz_en_s = intval($katz_en_last_mod_time[2]) + $s;
  // 有効期日・更新日時・現在日時をmktimeで取得
  $katz_en_limit_ymdhis  = mktime($katz_en_h,$katz_en_i,$katz_en_s,$katz_en_m,$katz_en_d,$katz_en_y);
  $katz_en_modify_ymdhis = mktime($katz_en_last_mod_time[0],$katz_en_last_mod_time[1],$katz_en_last_mod_time[2],$katz_en_last_mod_date[1],$katz_en_last_mod_date[2],$katz_en_last_mod_date[0]);
  $katz_en_now_ymdhis    = mktime();
  // 有効期日までの残り時間、経過時間も取得
  $katz_en_timeleft      = ($katz_en_limit_ymdhis - $katz_en_now_ymdhis) > 0 ? ($katz_en_limit_ymdhis - $katz_en_now_ymdhis) : 0;
  $katz_en_overtime      = ($katz_en_now_ymdhis - $katz_en_limit_ymdhis) > 0 ? ($katz_en_now_ymdhis - $katz_en_limit_ymdhis) : 0;

  // 有効期限が過ぎていたら有効期日経過後のメッセージを表示。過ぎていない場合は有効期日前のメッセージを表示。
  if (($katz_en_limit_ymdhis - $katz_en_now_ymdhis) > 0) {
    $ret = '<div class="non_expiration">'."\n".get_option('katz_en_mae_html')."\n</div>";
  } else {
    $ret = '<div class="expiration">'."\n".get_option('katz_en_ato_html')."\n</div>";
  }

  // 残り時間が1日を超えているか否かで表示をちょっと変える(「*時間*分」もしくは「*日と*時間」)
  if (($katz_en_timeleft / 86400) < 1) {
    $katz_en_timeleft_format = str_pad(floor($katz_en_timeleft / 3600), 2, "0", STR_PAD_LEFT)."時間".str_pad(floor(($katz_en_timeleft % 3600) / 60), 2, "0", STR_PAD_LEFT)."分";
  } else {
    $katz_en_timeleft_format = floor($katz_en_timeleft / 86400)."日と".str_pad(floor(($katz_en_timeleft % 86400) / 3600), 2, "0", STR_PAD_LEFT)."時間";
  }
  // 経過時間も1日を超えているか否かで表示をちょっと変える(「*時間*分」もしくは「*日と*時間」)
  if (($katz_en_overtime / 86400) < 1) {
    $katz_en_overtime_format = str_pad(floor($katz_en_overtime / 3600), 2, "0", STR_PAD_LEFT)."時間".str_pad(floor(($katz_en_overtime % 3600) / 60), 2, "0", STR_PAD_LEFT)."分";
  } else {
    $katz_en_overtime_format = floor($katz_en_overtime / 86400)."日と".str_pad(floor(($katz_en_overtime % 86400) / 3600), 2, "0", STR_PAD_LEFT)."時間";
  }

  // メッセージ中の期日表示部分を実際の期日に置き換える。
  $ret = preg_replace('/%target_date%/', date('Y/m/d H:i:s', $katz_en_limit_ymdhis), $ret);
  $ret = preg_replace('/%modified_date%/', date('Y/m/d H:i:s', $katz_en_modify_ymdhis), $ret);
  $ret = preg_replace('/%timeleft%/', $katz_en_timeleft_format, $ret);
  $ret = preg_replace('/%overtime%/', $katz_en_overtime_format, $ret);

  return $ret;
}
// 実際のショートコード用のソースここまで

だらだら書いてたら長くなったな。

変更ついでに管理画面から
有効期日前メッセージを
「このページは %target_date% まで有効です。」に。
有効期日経過後メッセージを
「このページの有効掲載期限は %target_date% までです。記載されていることの正確性を確認ねがいます。」に変更。

とりあえずこれで反映させることには成功。

Next is [8.CSSを適用する]