wordpress 3.0.1
の日本語が出たので、3.0を入れてたサイトを
バージョンアップしてみました。
・・・管理画面入ると
レイアウト崩れて文字化け起してるしぃ~!!
今までこういう事無かったからバックアップ取ってないしぃ~!
ふ~・・・手動で3.0を入れ直しましたorz
まぁ、焦る事は全然なかったのですが、
はたして何が原因だったのか・・・。
おそらくは個の環境のせいだろうけど・・・。
まぁ、本格的に入れるのは今度にしよう
2010-08-02 追記
原因はwp-admin/css内のファイル(のどれか?)が破損していただけのようでした。
なので手動でこの部分のみFTP使用してUPし直したら正しく表示されるようになりました。
get_the_categoryの引数
「get_the_category」というテンプレートタグがあります。
記事のカテゴリーIDやカテゴリー名なんかを取得する時に用います。
今回とある案件で、カテゴリー毎の最新のコメント一覧を作成したくて
このテンプレートタグを知ったのですが、
wordpress.日本語のドキュメント
(=正確には本家のドキュメント)では,
このテンプレートタグは「引数なし」となってますが、
実関数を見ると、実は引数にpost_idを渡すことが出来ます。
(引数のデフォルト値はfalseが渡っています。)
これを利用して、今回は(wp_)commentsテーブルの
「comment_post_ID」を引数に渡す事で
無事(強引に)コメントを割り振らす事が出来ました。
・・・他になんか効率の良いやり方があるような気がします(・・;)
add_menu_pageの謎
初めに断わっておきます。
これは入れたプラグインによるものかもしれないので
参考にしないでください。(まったく検証していないので・・・)
wordpressに
add_menu_page
add_submenu_page
という関数がある。
これらは管理メニューに項目を追加する為に使用していて、
add_menu_pageはトップレベルでの追加。
add_submenu_pageは既存のメニュー内に追加
という目的でそれぞれ使用しています。
(ここまでは前置きです。)
これら両関数の引数に「access_level/capability」という引数がある。
(add_menu_pageの第三引数。add_submenu_pageの第四引数)
wordpress.日本語のドキュメントなどで見てみると
「使用する為に最低限必要なユーザーレベルまたはユーザーの種類と権限」
と書かれているのだが、とある案件でユーザーレベル単位で
細かく動きを別けた際に気付いたのだが、
「最低限必要なユーザーレベル」という部分が
何故か、
「使用する為のユーザーレベルまたはユーザーの種類と権限」
という動きだった。
急ぎだったので、強引にそれ以上のユーザーレベルのときは
そのユーザーレベルで適用・・・とさせてしまったのだが
もし同様の案件でユーザーレベル単位で何かする際には
ちゃんと原因追究をしよう・・・と反省を込めてメモしました。
最後に、
ユーザーレベルはVer3.0より非推奨化されていますので
使わないようにしましょうw
(だったらネタにするなよ!というツッコミは無しでお願いします。^^;)
wordpressでjQuery(javascript)を使用する際に気をつける事
ハマったのでメモ。
javascriptを使用する際に(headにscriptのタグを挿入する際)には
「wp_enqueue_script()」を使用する。
この関数を使用する事により
重複や順番が適切となるので非常に便利。
私がちょい前に作ったプラグインに
jQueryを使用していたのですが、(一応上記の関数は使用。)
何故かエラー出て機能せず(T_T)
しかも、管理画面側で使用するとエラー出ないのに
テーマ側で使用させようとするとエラーとなるという現象が起こる。
疑わしくは自分の作成したプラグイン(自分に自信ないのでw)
・・・って事で自作のソース調べても原因が判らず、
判明するまで結構時間をかけてしまいました。。。
原因
落としてきた別プラグインがjavascriptで上記関数を使用していなかった為、重複で読み込まれてました。。。
プラグインの作成者の方々も意外とこの関数については知らない方が多いのかもしれません。
私も最初は強引に追加したりしてました(^^;
javascript使用しているプラグインを多数している場合には
ここらは気を付けた方がいいかもしれません。
WordPress3.0
5か月ぶりの更新
その間にWordPress3.0が出たので検証しました。
(当サイトではなくテストサーバーでですが)
やはり3.0の特徴はMUとの統合によるマルチブログ対応って事で
マルチブログを試してみました。
(マルチブログのやり方等はよそ様のサイトで一杯書かれていますので、
ここでは紹介しません。)
MUを触ったことがなかった私にとって
気になっていたのがDBの構造。
で調べたので、私的メモ。
以下のテーブルがブログ作成する度に追加されます。
これらのテーブルの名称は実際には接頭語が付く。
例えば
wp_
というデフォルトの接頭語ならば
wp_posts
という名称で実際にはDBテーブルが作成されます。
で、二個目のサイトを作成すると
wp_2_posts
三個目だと
wp_3_posts
と接頭語と名称との間に番号が振られていくようだ。
DB追加して・・・というプラグインを作成する際には色々考えた方が良さそう。
というか、どうやるのが賢いのかな???
上記同様に全部にテーブル足す・・・だと
プラグイン適用時にテーブル追加させたりしているので
プラグイン 適用後にサイト追加すると「ズレ」おきそう。
(サイト追加時のアクションフックとかあるのかな???)
それとも1テーブルにして、その中にどのサイトかっていうデータ保持するフィールドを持つ・・・とか???
その場合、接頭語とテーブル名称の間の数字はどうやって取得するんだろ???
う~ん・・・まだ、判らない事だらけです。
PC買ってしまった
もう昨年の年末ぐらいから、ずっとPC組みたいと思って
何十回もネットショッピング上で構成だけ考えていたのだが 遂に買ってしまった。
組むこと自体は2ヶ月前ぐらいに友人のPCを組んだのだが、自分のPCは3年ぶり
構成
- CPU: Intel Corei7-860
- Mother: ASUS P7P55D
- memory: UMAX Cetus DCDDR3-4GB-1333 (2GBx2)
- HDD: SAMSUNG HD502HI(500GB/SATA)
- GPU: HIS H577FM1GD RADEON HD 5770
- 光学ドライブ: LG電子 BH10NS30 BL(ブルーレイ書き込み10倍速)
- 地デジチューナー:SKNET SK-MTVHDPG
- PCケース: Antec Three Hundred
- 電源:アクティス AP-650GTX/P
wp_list_pages関数exclude_treeの複数指定
wp_list_pagesの引数でexclude_treeというバラメータがある。
これを指定すると、そのページIDを親とする子ページもすべて除外してくれる。
カンマで複数指定可能とwordpress.日本語のドキュメントなどでは書かれているのだが、
複数指定をしても、最初に指定したIDしか適用されなかった。
指定の仕方が悪いのか?と色々試したが適用されず・・・。
仕方が無いので中身を見てみた。
wp-admin/post.phpの2603行目あたり
wp-include/post.phpの
function &get_pages($args = ”)
関数内(Ver3.0の場合 3197行あたり)
$exclude = (int) $exclude_tree;
$children = get_page_children($exclude, $pages);
$excludes = array();
foreach ( $children as $child )
$excludes[] = $child->ID;
$excludes[] = $exclude;
$num_pages = count($pages);
for ( $i = 0; $i < $num_pages; $i++ ) {
if ( in_array($pages[$i]->ID, $excludes) )
unset($pages[$i]);
}
・・・文字列をそのままintにキャストしてるじゃんorz
それじゃ、カンマ区切りで渡してもキャストしたら最初の値のみになるわな^^;
って、事で以下のように修正(ホントは本体なので修正したくないのだが・・・)
$excludelist = preg_split('/[\s,]+/',$exclude_tree);
if ( count($excludelist) ) {
$excludes = array();
foreach ( $excludelist as $excludestr ) {
$exclude = intval($excludestr);
$children = get_page_children($exclude, $pages);
foreach ( $children as $child ) {
$excludes[] = $child->ID;
}
$excludes[] = $exclude;
}
$num_pages = count($pages);
for ( $i = 0; $i < $num_pages; $i++ ) {
if ( in_array($pages[$i]->ID, $excludes) )
unset($pages[$i]);
}
}
これで複数指定できるようになった♪
2010/7/5 追記
WordPress3.0jaでも上記は未修正でした。。。
あと一部に記載ミスがあったので修正しました(赤字部分)
ソースコードを綺麗に表示するプラグイン
ソースコードを綺麗に表示させるプラグインを入れてみた。
[php]コードだよ[/php]
と書けば
コードだよ
と、表示してくれる。
他にも色々な言語に対応しているようだ。
get_post関数について
連続投稿。
前記事と同じくパン屑リストのことなので迷ったが別記事にした。
実はArtisteerで作成したテーマにて
プラグイン「Breadcrumb NavXT」を適用すると
ページの中のページ(つまり子ページ)に入った際に
パン屑リストが上手く表示されなかった。
で、その解決に至るまでのメモ(というか、愚痴・・・か?)
まずテーマによるものって判るまでにかなり時間を掛けてしまったorz
プラグインの干渉???それともwordpressを2.9.1にしたから???
プラグインのバグ???とか色々試行錯誤・・・(T_T)
ただ、テーマを変えてみると普通に表示されることが発覚!
おぉ!って事はArtisteer(で作成したテーマ)が悪いんじゃん!ってことで
やっと原因の特定に至る。
結論としては、
パン屑リスト表示前にテーマのメニュー部分の表示する動きとして
テーマ内のfunction.phpののart_activeIDという関数を通るのだが、
その中でget_page関数が呼ばれている。
(↑get_page自体はwordpressのwp_include/post.phpに実体がある)
さらにget_page中で呼ばれるget_post関数の
引数にてグローバル変数を参照渡しで渡していて
get_post関数でグルーバルの$postを配列から見つかった子のpostidに書き変えていた。
(↑get_postもwordpressのwp_include/post.phpに実体がある)
・・・ん?じゃあ、get_page読んでるだけのArtisteer作成テーマは無実じゃん!!
書き変わってるところではglobalの$postに対し宣言すらしてないし!!
そもそも$postに直idの値を入れて良いのか???
プラグイン作成する時にも、そんなこと想定して作成してないってば!!
・・・と、憤りさえ感じたが、まぁ、WP本体なので仕方がない・・・。
ま、とにかく$postが書き変わってしまった為に
その後にBreadcrumb NavXTが呼ばれても
正しく$postが取れないくて表示されなかった・・・という訳だ。
テーマ内の関数の動きとして、
子のIDを取って自分の配列に入れるって事をやりたいだけのようなので
そのget_page前にグローバルのpostをクローンで複製しておいて
関数最後にpostの中身を元に戻す動きに変え、正しく表示されるようになった♪
ふぅ~疲れた・・・。
あと、今回根本的なこととして
知ったのだが、
get_page関数はidを参照渡しにしているので、
idを数字で直指定することは出来ない!
パン屑リストをつけよう
パン屑リストとは
記事の階層を見せる奴だ。
TOP > カテゴリー > wordpress
みたいなやつ。
wordpressのテンプレートタグで付けることも可能みたいだけど
プラグインを適用してみた。
このプラグインの日本語版を提供しているサイトも紹介
プラグイン適用後にテーマのphpを編集しなければいけない。
<div class=”breadcrumb”>
<?php
if ( function_exists( ‘bcn_display’ ) ) {
bcn_display();
}
?>
</div>
と書けばOK。
意味的には「bcn_displayがあればbcn_display関数を呼べ」ていう意味。
これで、その場所にパン屑リストが表示される。