Posts Tagged ‘wordpress’
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使用しているプラグインを多数している場合には
ここらは気を付けた方がいいかもしれません。
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関数を呼べ」ていう意味。
これで、その場所にパン屑リストが表示される。
ビジュアルエディタをカスタマイズするプラグイン
wordpressの投稿画面は
ビジュアルエディタとHTMLエディタとある。
ビジュアルエディタではword感覚で文字入力できる。
標準のままでも十分なのだが、より便利にする為にプラグインを入れてみた。
プラグインを挙げ適用すると「設定」メニューに専用の設定項目が追加されるので、
そこでカスタマイズ。(※注)設定メニューは英語です。)
これで、大分表現しやすくなるかと思う。
改行プラグインを入れてみる
wordpressの仕様では思ったとおりに改行することができない。
(勝手にタグを削ってしまう。) ので、改行するためのプラグインを探してみた。
一番有名なのは「brBrbr」というプラグインのようだ。
とりあえずDLしてソース(中身)を見てみる。
(リンクはトップに張ってます。カテゴリーの「wordpress」でプラグイン記事が見つかります)
中のソースを見るみると wpautopっていうフィルターを無くして
独自のフィルターをaddしてる。
追加したフィルター関数の中で 文字列を置換・・・しているようだが、
用途によりpreg_replaceとstr_replaceを分けているようだ。
って、何が違うのかよく判らないけど、
正規表現する場合はpreg系って事???
あと、pregの方は複数値の検索も出来るのか???
うーん・・・まだ、判らないことだらけだ・・・OTZ
・・・話がそれたが、とりあえず次に適用してみて動きを確認してみる。
・・・うーん・・・確かに便利かも・・・でも、自分が望む動きとはちょっと異なる。。。
(決して否定しているわけではありません。)
・・・って、事で別のプラグインを探してみる。
次に「PS Disable Auto Formatting」というのを試してみる。
中身を見る・・・なんか同じ改行コードのプラグインなのに、
物凄く中身あるなぁ・・・って、ちょっと見ただけじゃ動き判らん!
仕事だったら、ちゃんと動き確認するが。。。まぁ、とりあえず適用してみよう!
おぉ、適用すると管理メニューに設定もある。
無駄に改行させてみる。
なるほど・・・・brBrbrは名前どおりbrタグだが、
こちらの場合はPタグなのか。
xhtmlではbrタグ連投は非推奨だったと思うから(多分)
自分としてはこちらのほうが実用的か???←個人的意見
ん?じゃあbrは逆にどうなるんだ?
ってことでbr入れてみる。
おぉ!ちゃんと対応している。
設定ではコメント側も対応できるみたいだし、かなり良いかも!
って事でとりあえず、今回はPS Disable Auto Formattingって事で決定!
最後に両プラグイン作者に感謝です。
テーマを変更してみた。
まずは概観を変えてみよう! と言うことでテーマを探した。
テーマはダッシュボード(Wordpressの管理画面)から検索も出来るのだが、
今回のテーマはGoogleで検索してみた。
(「WordPress テンプレート」などで大量に見つかる)
今回はその中から「WPCLASSIC」というサイトから探し出した。
テーマの変更方法
- テーマをダウンロード
- テーマを解凍(圧縮ファイルになっている事が多い)
- FTP起動。WPをインストールしたフォルダの中にある「wp-content/themes」の中にフォルダごと挙げる
- WPダッシュボードに入り、「外観」⇒「テーマ」に入る。
- 今回挙げたテーマ下にある「使用する」を押下。
で、変更終了。
テーマは自作することも可能だし、ゆくゆくは自作しようとは思う。

