WordPressのdaily archiveのタイトルが [ 200N >> N月 >> NN ] と最後がなんともしまらないので「日」を付けることにした。
wp_title()
に続けて、
if (is_day()) {echo " 日";} |
とした。
The multimedia for the future
Wordpressをカスタマイズするための第一歩
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 プラグインを使えばプラグインが勝手にやってくれるけど、好きじゃないんだよねこのプラグイン。
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>
の前に書くのが吉。
WordPress である特定のカテゴリやタグだけ表示を他と変えたい時がある。
わざわざテンプレートファイルを作るほどでもない時は、オリジナルループの条件を足したり変更したりすることで対応できる。
条件を文字列で指定する時は $query_string
を利用する。
// 表示件数を20件に変える query_posts($query_string."&showposts=20"); |
条件が category__in, category__not_in...
など配列指定が必要な条件の時は
$wp_query->query_vars
を使用する。
// カテゴリID 5, 8, 7 を除く $wp_query->query_vars['category__not_in'] = array(5,8,7); query_posts($wp_query->query_vars); |
WordPress は本家も日本語版もドキュメントが他のCMSなどに比べて充実していると思う。
ただテンプレートタグの説明はだいたいあるけど、変数になるとどこに説明があるのかが分かりにくい、と思ったりする。
Codex を上手に使うと WordPress はもっと楽しくなる。
Codex 日本語版
Codex