wp-jrelatedを関連記事を表示するのに利用している。
http://wppluginsj.sourceforge.jp/wp-jrelated/
Yahoo! Japan が提供する「日本語形態素解析Webサービス」を使って投稿の内容を分析し関連する投稿などを表示します。
バージョンを1.50にするとWarningが出るようになってしまった。
注意書きに、関数の引数を変えたとあったのが原因かと思うのだけど・・・
The multimedia for the future
BlogだけでなくCMSとしても使えるイケテルツール。
wp-jrelatedを関連記事を表示するのに利用している。
http://wppluginsj.sourceforge.jp/wp-jrelated/
Yahoo! Japan が提供する「日本語形態素解析Webサービス」を使って投稿の内容を分析し関連する投稿などを表示します。
バージョンを1.50にするとWarningが出るようになってしまった。
注意書きに、関数の引数を変えたとあったのが原因かと思うのだけど・・・
WordPress 2.5 から機能追加されたショートコード。
[ショートコード名]のようにブラケットで囲った部分をタグに置換えてくれる。
XMLのように
[ショートコード名]HTMLタグや文字[/ショートコード名]
[ショートコード名 fruits=”みかん” price=”200″ /]
みたいに属性も指定できて便利。
今回、[sample /]という風にショートコード名に「sample」と名前をつけたコードを追加したが、imgタグのパスに/sample...
とsampleという文字が入っていて、ココも置換えてしまった。
てことは、ショートタグ名は投稿中に絶対現れないユニークな名前にしとかないとひどい目にあうってことになる。
またプラグインで使っているかもしれない名前を使うのもダメってことらしい。
どうもショートコード名は慎重に設定しないといけないようだ。
クラス名のようにユニークになるようにドメインでもくっ付けるのがよさそう。
親ページの「タイトル」と「本文」、子ページの「タイトル」と「本文」をまとめて出力したい。
どうも該当するテンプレートタグが無い様子。
無い知恵しぼって考えた。
WordPressのdaily archiveのタイトルが [ 200N >> N月 >> NN ] と最後がなんともしまらないので「日」を付けることにした。
wp_title()
に続けて、
if (is_day()) {echo " 日";} |
とした。
WordPress のテンプレートタグ、カテゴリ。
ある親カテゴリの子カテゴリのIDを取得したい時があったけど、どうも該当するテンプレートタグが無さそうだった。
$wpdb
インスタンスを使ってSQLクエリを使ってみることにした。
$wpdb->get_results("SELECT t.term_id FROM $wpdb->term_taxonomy AS term LEFT JOIN $wpdb->terms AS t ON term.term_id = t.term_id WHERE parent = 'Parent ID' ORDER BY t.slug"); |
WordPress 2.5系からコンテンツやカテゴリ管理に taxonomy「分類」が使われています。
terms
カテゴリ、タグに関する情報テーブル
term_id | bigint(20) | PRIMARY | auto_increment |
name | varchar(200) | INDEX | カテゴリ名 / タグ名 |
slug | varchar(200) | UNIQUE | |
term_group | bigint(20) |
term_taxonomy
カテゴリ、タグに関する情報テーブル
term_taxonomy_id | bigint(20) | PRIMARY | auto_increment |
term_id | bigint(20) | UNIQUE | |
taxonomy | varchar(32) | category / link_category / post_tag | |
description | longtext | ||
parent | bigint(20) | 親ID | |
count | bigint(20) | 投稿数 |
SQLの結果から子カテゴリIDを取出す。
$children_cats = array(); foreach($wpdb->last_result as $cat){ $children_cats[] = $cat->term_id; } |
関数化して functions.php にでも置いておくと便利かな。
あと、バージョンアップに伴ってテーブル構造が変わったら使えなくなる。
2.5系へのアップグレードでカテゴリ関連のテーブル構造が変わって、SQLを使ってカスタマイズしていたテンプレートの修正で死にそうになったことがある。
index とかアーカイブとかコンテンツが増えてくると複数ページにまたがることがある。
title, description
が重複していると Google サイトマップさんに怒られるので、せめてページナンバーを付けて許してもらうことにした。
ページナンバーを付ける。
wp_title();
に続けて
echo (isset($paged) && $paged) ? " Page - {$paged}" : ""; |
とした。
変数 $paged
に現在のページナンバーが入っているのでセットされている時に出力するようにしただけ。
all-in-one-seo-pack プラグインを使えばプラグインが勝手にやってくれるけど、好きじゃないんだよねこのプラグイン。
イベントを管理しカレンダーに表示してくれるプラグイン Event Calendar 3 の言語ファイルを作った。
Event Calendar 3 は投稿にイベント日時を追加して管理するプラグイン。
投稿が無ければイベント日時を登録できない。
ウイジェットも付属する。
イベントだけのカレンダーを表示したり iCal ようのファイルがダウンロードできたり・・・
運用を工夫すると休業日の表示ができたりすると思う。
あるサイトの開発に使用した。
クライアントオーダーでプラグインの改造を余儀なくされたが、基本的な機能には多いに助けられた。
日本語化のために言語ファイルを作成した。
作成時点のバージョンは3.1.2、現在の3.1.4でも問題ないようだ。
せっかくなのでダウンロードできるようにしてみた。
作成には Poedit を使用。
圧縮には MacZip4Win を使用。
リンク先からダウンロードし解凍後、フォルダ内のファイルを Event Calendar 3 プラグインフォルダ内 gettext フォルダへアップロード。
ファイル名を ec3-ja.* へ変更。
カスタムフォームを作れる cforms が人気のプラグインらしい。
確かにDBへデータを保存したりなかなか高機能。
日本語言語ファイルもあるのでかなり便利。
ただ日本語環境だといくつか問題がある。
メールSubjectはかなりの確率で文字化けを起こす。
コードが日本語Subjectを考慮していないのが原因。
送信者名は “ブログタイトル”
メール本文は WordPress の charset になるので UTF-8 になる。
今はUTF-8でメールを送信してもほとんどのメーラーは問題なく受信できるので、まっイイカとあきらめる。
メールSubjectの文字化けはコードを修正しなければならない。
// lib_aux.php function encode_header ($str) { $x = preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); if ($x == 0) return ($str); return mb_encode_mimeheader($str,'ISO-2022-JP'); } |
関数 encode_header
を修正した。
マルチバイトに対応していない部分を全て削除した。
セキュリティ面にどんな影響が出るのか読めない。
送信者の文字化けは
$frommail = '"'.get_option('blogname').'" <wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])) . '>'; |
を下記のように修正した。
$frommail = '"'.mb_encode_mimeheader(get_option('blogname'),'ISO-2022-JP').'" <wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])) . '>'; |
ただ、このコードあっちこっちにハードコードされているのでいちいち修正するのが面倒くさい。
せめて関数化してくれていると良かったのに、と思ったりする。
メール本文の文字コード指定もあっちこっちにハードコードされてたりして、イタダケナイと思う。
アップデートも頻繁に行われ、Wordpress のバージョンアップにもいち早く対応しているなど、高機能のプラグインをメンテナンスし続けてくれて感謝!
2バイトな(UTFなのでマルチバイトって言った方がよいのかな?)日本語なんて知らない人が作っているからしょうがないよネな、良くある話。
wp-hatena は「はてなブックマーク」などに追加するリンクタグを挿入できる。
ただ、テンプレートにタグを打ち込まないといけないのがめんどうだったので functions.php
に Hook を作ってみた。
// bookmark icon function hatena_bookmark_icons(){ global $wph; if(isset($wph)) { echo ' '; $wph->addHatena(); $wph->adddelicious(); $wph->addLivedoor(); $wph->addYahoo(); $wph->addFC2(); $wph->addNifty(); $wph->addPOOKMARK(); $wph->addBuzzurl(); $wph->addChoix(); $wph->addnewsing(); echo ' '; } } add_action('the_content', 'hatena_bookmark'); function hatena_bookmark ($content){ if ( !is_feed() && function_exists( "hatena_bookmark_icons" ) ) hatena_bookmark_icons(); return $content; } |
テンプレート the_content();
しているところで投稿データの前に表示される。
Hook って便利だ。
update
Feed にもブックマークアイコンが表示されていたので修正した。
WordPress テンプレートで prototype.js, jQuery…etc などの JavaScriptライブラリを使いたい時にテンプレートにハードコードしてはいけない。
プラグインを作成し JavaScriptライブラリを使いたい時も同じ。
コンフリクトを起こすかもしれないし、同じライブラリを何度も呼び出してしまうかもしれない。
ちゃんと関数が用意されている。
// wp_head の前で使う! wp_enqueue_script( 'handle', 'src', 'deps', 'ver'); // wp_head を次に - wp_head でライブラリの<script>コードが書出される wp_head(); |
Function Reference/wp enqueue script
handle(string)
ライブラリ名(小文字)
src(string)
ライブラリまでのパス – 通常は指定しなくてよい。
添付されているライブラリが最新版というわけではないので、どうしても最新版でないといけないような時に使うのだろう。
deps(array)
– 通常は指定しなくてよい。
ver (string)
– 通常は指定しなくてよい。
handle を指定すればことたりるはず。
// prototype.js and scriptaculous.js wp_enqueue_script('prototype'); wp_enqueue_script('scriptaculous-effects'); wp_head(); |
下記のライブラリは WordPress に添付されている。
Script Name | Handle |
---|---|
Scriptaculous Root | scriptaculous-root |
Scriptaculous Builder | scriptaculous-builder |
Scriptaculous Drag & Drop | scriptaculous-dragdrop |
Scriptaculous Effects | scriptaculous-effects |
Scriptaculous Slider | scriptaculous-slider |
Scriptaculous Sound | scriptaculous-sound |
Scriptaculous Controls | scriptaculous-controls |
Scriptaculous | scriptaculous |
Image Cropper | cropper |
SWFUpload | swfupload |
SWFUpload Degarade | swfupload-degrade |
SWFUpload Queue | swfupload-queue |
SWFUpload Handlers | swfupload-handlers |
jQuery | jquery |
jQuery Form | jquery-form |
jQuery Color | jquery-color |
jQuery UI Core | jquery-ui-core |
jQuery UI Tabs | jquery-ui-tabs |
jQuery UI Sortable | jquery-ui-sortable |
jQuery Interface | interface |
jQuery Schedule | schedule |
jQuery Suggest | suggest |
ThickBox | thickbox |
Simple AJAX Code-Kit | sack |
QuickTags | quicktags |
ColorPicker | colorpicker |
Tiny MCE | tiny_mce |
Prototype Framework | prototype |
Autosave | autosave |
WordPress AJAX Response | wp-ajax-response |
List Manipulation | wp-lists |
WP Common | common |
WP Editor | editor |
WP Editor Functions | editor-functions |
AJAX Cat | ajaxcat |
Admin Categories | admin-categories |
Admin Tags | admin-tags |
Admin custom fields | admin-custom-fields |
PAssword Strength Meter | password-strength-meter |
Admin Comments | admin-comments |
Admin Users | admin-users |
Admin Forms | admin-forms |
XFN | xfn |
Upload | upload |
PostBox | postbox |
Slug | slug |
Post | post |
Page | page |
Link | link |
Comment | comment |
Admin Gallery | admin-gallery |
Media Upload | media-upload |
Admin widgets | admin-widgets |
Word Count | word-count |
WP Gears | wp-gears |
Theme Preview | theme-preview |
ちなみに wp_head
はなるべく </head>
の前に書いておく。
プラグインなどの中にも wp_head
を使用してコードを吐き出している場合がある。
テンプレートでは wp_footer();
の記述を忘れないように挿入場所は </body>
の前に書くのが吉。