exclude_treeが効かないwordpress2.7.1

さて、連日のwordpress関連ネタに飽き飽きしているところです(主に自分)が、まあ、なんだ。マジうんこうんこだ。

さて、wordpressですが2.7にバージョンアップしたついでに、wp_list_page()に’exclude_tree‘というのが追加されました。これはまあ、分かる人には分かるでしょうけどサブページのあるページをサブページごと表示させない、というやつですね。

今までは’exclude’で、親ページを指定したらそこにぶら下がるサブページは消すというのが標準だったみたいですが、きちんと分離させようということなんでしょう。良いと思います。

が、しかし。

全然だめです。ぜーんぜん。指定しても消えません。出しゃばります。すごいです。

まあ完璧にバグらしく、このバグについては、tracに報告が上がってるようですのでそのうち対処されそうですが、実装するのはいいですが検証ぐらいしてほしいとか思う、そんなつくばに冬が訪れた今日をどうお過ごしでしょうか。

つくばで雪が今年度初めて降りました。アホか。

tracではホントに?マジで?みたいな次元の話をしてるのでバージョン3あたりまで待つぐらいの気合いがほしいかもしれませんが、Codexに書いてるぐらいなので早急に修正を望みます。

さて、無いものねだりをしてみると、本国のフォーラムに対処方法っぽいのが書いてあるのですが、毛唐語で読めません。まあ無理矢理無い知識と知人の協力によってがんばってひもとくと…。

wp-include/post-template.phpの616行;

$r['hierarchical'] = 0;

//$r['hierarchical'] = 0;

要はコメントアウトしろと。

次いで、includes/post.phpの2190行からの数行;

if ( !empty($exclude_tree) ) {
 $exclude = array();

$exclude = (int) $exclude_tree;
 $children = get_page_children($exclude, $pages);
 $excludes = array();
 foreach ( $children as $child )
 $excludes[] = $child->ID;
 $excludes[] = $exclude;
 $total = count($pages);
 for ( $i = 0; $i < $total; $i++ ) {
 if ( in_array($pages[$i]->ID, $excludes) )
 unset($pages[$i]);
 }
 }

を、以下の用に修正する;

if ( !empty($exclude_tree) ) {
$exclude = array();

$exclude = explode(',',$exclude_tree);
foreach ($exclude as $exclude_page) {
$children = get_page_children($exclude_page, $pages);
$excludes = array();
foreach ( $children as $child )
$excludes[] = $child->ID;
$excludes[] = $exclude_page;
$total = count($pages);
for ( $i = 0; $i < $total; $i++ ) {
if ( in_array($pages[$i]->ID, $excludes) )
unset($pages[$i]);
}
}
}

で、してみた。

結局どうなった

だめだった。\(^o^)/

\(^o^)/あきらめる\(^o^)/しかないか\(^o^)/もうだめぽ\(^o^)/

あと、日本だとぜんぜん話題になってないところ、ニワカユーザしか居ないことを表してるんじゃね?とか思った件について。2009/02/28の2時20分現在でGoogle日本語検索でexclude_treeを検索すると3件しかでない。アホか。

wordpressのインデックスで表示を分割する方法

wordpressでのインデックス(ホームページ)で、最新の記事を表示してるのは基本だと思いますが、その表示はループといわれる機能をつかって連続処理することで、最新の何件という風に表示してるんだけども…

さて、その途中でぶった切って、GoogleAdsenseや、お知らせとか、特集の記事リストとか、なんか入れたいと。

俺の場合は、このさかどん記録のインデックスでもやっているけど、1番最新の記事を表示した後に、その記事以降の記事リストと、固定ページリスト、それにAdsenseを表示させたかった。

なぜかというと、まあサイドバーに最新記事リストとか横に長いのを入れるのは窮屈だし、はたしてサイドバーがそれによって長くなるのもなあと。ビックフッターというのも流行ったけど、一番下まで記事リスト見るためには見ないよと。

それにおいら自身が、この記事見覚えないな、というのを直接見れればそれで良いなーとか。巡回中なら、もう見覚えのあるタイトルだったら、次のサイトを読めるし。

あと、そのリンクでその記事の単独表示ページ(パーマリンク先)に飛んでくれれば、そっちのほうがAdsense多いとかいう腹黒いところもあったりw

まあそんなこんなで、ぶった切りたかった。

で、結局どうしたか

いろいろぐぐりまくって、いろんな参考文献を見つけて総括してなんとかごり押しで実現した。

前提条件は、index.phpでの話ということぐらいか。以下の通り;

<?php if ( !is_paged() ) : // 1ページ目 ?>
<?php $my_query = new WP_Query('showposts=1'); //まず最初の最新1件を表示 ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
通常のループ内HTMLを書く。
<?php endwhile; //最初の1件おわり、この下は最新記事のリスト ?>
ここに、途中で挟みたいものを書く。HTMLでもいいしループでもなんでも。
<?php $my_query = new WP_Query('showposts=3&offset=1'); //最新1件をのぞいた3件を表示 ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
1ページ目に表示する記事の、のこりの件数のためのループをここにいれる。
<?php endwhile; //1ページ目のみのエントリー表示部分 終わり ?>
<?php else : // 2ページ目以降 ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
記事ループ
<?php endwhile; //記事ループおわり ?>
<?php else : //記事がなんもない場合 ?>
<?php endif; ?>
<?php endif; //ページ分け終わり ?>

こんな感じ。

<?php if ( !is_paged() ) : // 1ページ目 ?>

is_paged()を呼び出して、おまえがis_pagedじゃなければ以下の部分を表示しろと。ここで言うis_paged()なページとは、2枚目のページだとか、10枚目のページだとか、とにかく1番最初のページではないこと。

<?php $my_query = new WP_Query('showposts=1'); //まず最初の最新1件を表示 ?>

ここで、まず最新の1件を表示させようと仕向けてる。2件表示させたいならshowposts=の値を変更すればいい。

<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
通常のループ内HTMLを書く。

普通にループを仕向けてる。ここではなぜだがget_the_tags()が動かなかった。なぜだろう?

<?php endwhile; //最初の1件おわり、この下は最新記事のリスト ?>
ここに、途中で挟みたいものを書く。HTMLでもいいしループでもなんでも。

ループを終わらせて、そこに挟める。Adsenseのjs読み込みなど。

<?php $my_query = new WP_Query('showposts=3&offset=1'); //最新1件をのぞいた3件を表示 ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
1ページ目に表示する記事の、のこりの件数のためのループをここにいれる。

書いてあるとおりだが、ここにのこりの件数を入れる。

のこりの件数の算出方法だが、wordpressの「設定」→「表示設定」での設定画面「1 ページに表示する投稿数」にて指定した数から一番最初に表示する件数(ここでは1)を引いた数である。その数をshowposts=の値(ここでは3)とする。offsetの値は、一番最初に表示する件数(ここでは1)も忘れずに入れること。でないと重複表示してしまう。

<?php endwhile; //1ページ目のみのエントリー表示部分 終わり ?>
<?php else : // 2ページ目以降 ?>

ここでループを終わらせ、2ページ目以降はどのように表示させるかを続けている。このelse部分の処理をなくせば、2ページ目以降も同じように表示させる。

ここから下は、通常でも扱うような感じなので割合。まあ、コメントに書いてあるとおりです。

例外判断とかかなり曖昧なので、その辺を意識すると記事が1つもないとき、どういう表示するのか謎だけど…まあいいや。記事が有ればいい。

問題点としては、上げたとおりget_the_tags()あたりが動かないっぽい?ことと、結構強引にやってるから、設定画面の「1ページに表示する投稿数」との調和が取れないところか。その辺は実際に値を持ってるのを引っ張ってくればいいんだろうけど、めんどくさいので決めうちにしてしまってる…。だれか直して☆

まあ、そんなところ。もっと簡単な方法がありそうだけど、気にせず使うこととする。良いのかどうかはううむ…。

参考になれば幸いです。。

自分の紹介記事を書いてみた

といっても、元々Wikipediaの利用者ページに作ってたのをもってきただけなんだけど、現在の状況に修正してある。

さかどんについて

まあ、ぐぐれば分かることが書いてあるんで特に気にしてはいませんし、内容を気にしてはいけない。

しかしwordpressのWYSIWYG編集機能は便利だなあ。余計な要素や属性もあんまり出さないし。なによりコピペで書式設定がそのまま引き継がれるのは良いことだ。らくちんちん。

あ、この編集機能で一つ残念なのが、ハイパーリンクの設定でwordpress内のページをプルダウンメニューか何かで選択出来ればよいのになーと思った。そんぐらい。

きっとこれからももっと便利になるであろう。みんなも積極的に使うべき。デフォルトフォント設定が明朝なのは許してやっても良いとおもう。

wordpressのループ外にthe_author()を使う

wordpressのテンプレートauthor.php用に、投稿者名を表示させたいんだけどやり方がわからん、と。

単純にthe_author()使えれば良いんだけど、まあループの外にthe_author()は使えないんで、どうするかと言ったらそりゃなんとかするしかないわけで。

Author Archiveとかのタイトルでもなあ。みたいな

とりあえず、<?php echo $user_identity ?>でお茶を濁す。

他では、wp_title()をつかったりしてるところもあったけど…うーん?まあ、このあたりはそのうち2.8か3になる前には改善されそう。

PLAYSTATION3を買いました

プレステスリーです。PS3。どっちが推奨の略語だっけ…?

で、試しに出してみたら空気清浄機みたい…白だし…でかい…

つながるモニタが無いんで、試しにメインマシンのキャプチャボードにコンポジット入力したら、なかなか文字が読みづらくて、時代からの疎外感を感じた。
S端子にしたとしても、あまり変わらない気がしたので、これはHDMI専用のゲーム機なんだなあ、とちょっと納得。
電源ケーブルがそこら辺のサーバに付属してきそうな立派な太さで、消費電力に見合った感じ。
HDMIケーブルって付属しないんだね。
コンポジットケーブルが出てきて何かの間違いかと思ったんだけど、正常らしい。文字が潰れてこんなに見づらいと言うのに…けち。
HDCP対応したモニタが一切ないので(なぜそんなのに買ったのかも謎だけど)、たぶん数ヶ月は放置だろうなあ…やりたいゲームも実はそんなに。
まあ、お安く買えた(らしい)ので良いか。あんまり市場調査せずに買ったんだけど、おいらが1晩考えて買える値段ということで。
てか、いまだに付属するコントローラはDUALSHOCKじゃないんだね…ケチクサイ!!!
まあ、DUALSHOCK3ついてくるウェルカムボックスなんでいいっすけどね、たしかに機体も値段以上の能力なんだろうけども、そういう付属物でけちるのも良い気分じゃないなあ。。

さて、フレッシュプリキュアは敵役が適役だね。眉毛太い子がいないんで悲しい。
ところで、絶対可憐チルドレンはやっぱりいいですなあ。2センチ。
あ、そうそう、題名のない音楽会は司会者が変わって良い番組に変わったんで是非見るといいですね。前から好きだったんだけど司会者が嫌いでした。

あ、そうそう。部屋探しなんですけどねー
つくば市の秀和不動産ってところで、ちょっと契約に関して不明な部分があったので、「特約事項等に関する書面と、手付け前で申し訳ないけど契約書を見せてちょ。国交省のガイドラインとか条例に沿った契約をしてくれるとは思っていますが…」と言ったら
「(数名のおばちゃんたちに笑われて)いやー細かいこと気にする人には貸せませんね」
と言われて「まあ、帰れ(意訳)」と言われました。
細かいこと気にする人は、秀和不動産はやめた方が良いと思います。

そういう謎な特約があっても、どういうメリットがあるとかの説明責任とそれに関する書類等を出してちゃんとこちらが確認できるならば、契約の自由 もありますしこちらにも不利益が無いのであれば全く問題無いんだけど、対応がちょっと客を学生だからってなめすぎじゃない?って言うんで。
こちらもニコヤカに「お手数おかけしました」と丁寧にケンカ別れしてきした。

良い物件だったんだけどね。振り出しにもどっちゃったーなー。ウハハハ

まあ、学生の街なんで、たぶん不動産屋はこんな感じか。ちゃんとした契約をしてくれる不動産を探さないとねーあばば 。筑波近辺の学生諸君は気をつけたまえ。

たぶん、筑波大学に生協が入ってて、生協が斡旋とかしてたらそれなりに安心なんだろうけどなあ。
筑波大学は生協は無くて、業者が入ってるんだけど、まあそれなりに信用してもいい業者なのだろう…たぶん…うーん?
食堂を運営してるとある業者はちょっと信用できないような感じなので、どうなんだろうなあ。はあ。

さて、AVマルチtoS端子買ってこようかなあ?あはは
あとゲームは、グランツーリスモ5有料試験版とか?ポリフォニーの試験駄作に金払いたくないなあー今手元にGT ForcePro無いし。MacOS X PublicBetaぐらいにわくわく出来るであろうソフトウェアなら良いんだけど、なんかねー。
ポリフォニーの人柱は良い思い出があまりない。 PS2のGT4クローズドインターネット対戦試験バージョンをやっていたのでよく分かるんだ、ポリフォニーのひどさ。

モニターを買えば済むって…?置き場所もないしそんな余裕は無いよ!

あ、railfanがあるじゃないか…中古で探すか!K特急が運転できるぞ!やっほい!