blog製作記録 カテゴリー

当ブログのメイキング

WordPress2.6微調整

[技術メモ blog製作記録] 2008年7月18日(金曜日) 16:12

よくよく考えてみれば、古いまま使っても良かった気もします。
とは言え、バージョンアップしてしまった以上は、調整せねばなりません(ノ∀`)

リビジョン管理を無効に

特に深い事情があるわけではないのですが、なんとなく、DBが重くなりそうな気がして怖いので、無効にしてしまいます。
WordPress2.6のリビジョン管理を無効にする方法 に習いました。いやはやなんとも有り難い事です。

My Category Order

カテゴリの並び順を変えるプラグインです。
このプラグインは、コアファイルの一部(taxonomy.php)を差し替えて使用するのですが、2.6用のバージョンアップがまだ来ていません。どうも、2.6 のtaxonomy.php 自体、細かいバグがあるようで、そのFIXを待っているのかなぁ等と勝手に想像。
とりあえず、taxonomy.php の612行目以下のif分を コレに差し替えて正式対応までお茶を濁してみます。

	if ( 'count' == $orderby )
		$orderby = 'tt.count';
	else if ( 'name' == $orderby )
		$orderby = 't.name';
	else if ( 'slug' == $orderby )
		$orderby = 't.slug';
	else if ( 'term_group' == $orderby )
		$orderby = 't.term_group';
	else if ( 'order' == $orderby )
		$orderby = 't.term_order';
	else
		$orderby = 't.term_id';

コメントは受け付けていません。

そのまま上書き→管理画面で指示に従いボタンを押す
でアッサリバージョンアップ完了。
更新内容は地味と言えば地味。

流石に、コアファイルを差し替えているプラグインのMy Category Orderは、動作が反映されませんね。自分で精査するのも面倒くさいので、更新を待つとします。というか、カテゴリの表示順変更機能なんて標準で搭載しやがれです。

って、近頃、私もコアファイルを書き換えたじゃありませんか!(ノ∀`)
似たような機能が標準で載っているかもしれませんが、何も考えず、似たような箇所を書き換えました(*゚∀゚)=3
一応、意図通りに動いているようです……が精査しておりませんので応急処置と言ったところでしょうか。

コメントは受け付けていません。

概要

まだ名前をつけていないのですが、以下のコードを挿入することで、WordPressに「指定記事を含む各種リストのページへ飛べる」機能を追加できます。例えば、検索エンジン等から単体記事に辿り着いたとします。前後の記事も見たくなりますよね?しかし、標準機能では前後1記事ずつしか辿れません。「リスト」には飛べないのです。
一覧へ

ちょこっと改良

ブログ革命(プチ)のコードがちょこっとだけまともに。
追記 後日プラグイン化できました
コアファイルを直接書き換えている点はまだそのまま(ノ∀`)ですが、
記事などから自由に飛べるリストの種類が強化されました。(なーんて、SQL文をちょこっと削っただけですが)
全時系列リストに加え、カテゴリー別リストやアーカイブリスト、検索結果リスト等に飛べるようになりました。
飛びたいリストのURLに「pagewith=ポストID」を付加するだけで、その記事が含まれるリストのページに飛びます。

wordpress 2.5.1
query.php の1426行目に以下を挿入
※追記 WordPress2.6 では 1447行目

		//rtype
		//paged定が無くpagewith指定があれば
		if (!$_GET['paged']) {
			$pagewith = ereg_replace('[^0-9]+','',$_GET['pagewith']); //ごみを取る
			if ($pagewith) {
				$pagewithby = "AND wp_posts.ID>$pagewith";
				$prerequest = " SELECT COUNT(*) as postCounter FROM $wpdb->posts $join WHERE 1=1 $where $pagewithby $orderby";
				$this->prerequest = apply_filters('post_counter_request', $prerequest);
				$this->postposition = $wpdb->get_results($this->prerequest);
				//$paged $limit作り直し
				$paged = floor( $this->postposition[0]->postCounter / $q['posts_per_page'] ) + 1;
				$pgstrt = ($paged -1) * $q['posts_per_page'];
				$q['paged'] = $paged;
				$limits = 'LIMIT '.$pgstrt.','.$q['posts_per_page'];
			}
		}

同、link-template.php の611行目に以下を挿入
※追記 WordPress2.6 では 624行目
なお、コレは前回と全く同じコード

	$request = remove_query_arg( 'pagewith' );

これで、後はスキン側でインターフェイスを用意するだけで、理想的なナビゲーションに加工できるはずですヽ(・∀・)ノ

使用例

今回の拡張で、リストURLに「pagewith=ポストID」を付加することで、ポストIDの記事を含むページが自動的に選択されます。
たとえば、本ブログの87番記事の場合。(なお、この記事への通常のリンクは http://www.denkasi.com/blog/?p=87 です。)

全時系列リストの87番記事を含むページへは

http://www.denkasi.com/blog/?pagewith=87#post-87
との記述になり、(本記事を書いている現在は)6ページ目へ飛びます。

同カテゴリリストの87番記事を含むページへは

http://www.denkasi.com/blog/?cat=20&pagewith=87#post-87
との記述になり、3ページ目へ飛びます。

2008年5月のアーカイブリストの87番記事を含むページへは

http://www.denkasi.com/blog/?m=200805&pagewith=87#post-87
との記述になり、2ページ目へ飛びます。

語句’IE’で検索した結果リストの87番記事を含むページへは

http://www.denkasi.com/blog/?s=IE&pagewith=87#post-87
との記述になり、2ページ目へ飛びます。

実装はテーマ(スキン)次第となりますが、87番記事単体ページに、色々付加することで、直感的なナビゲーションが構築できるはずです。

※Macだと(FireFox3、Safari3で確認)パーマリンクを設定している場合 #post-87 の部分がキャンセルされてしまうようです。

Comments (3)

個人的にはブログインターフェイスの革命(ノ∀`)

記事の呼び出し方を増やしました。
特定の記事単体()だけではなく、特定記事を含む「リスト」()で呼び出せるようにしました。
こんなのがなぜ革命的かと言いますと、これで単体記事のページから、その記事を含むリストのページに行けるのです。最初にたどり着いたのが単体記事でも、そこから簡単に時系列リストの該当ページに行けるのです。
これで、単体記事から記事リストに飛びたい等で懸案だった、インターフェイスの一部が実装できました。

一覧へ

無理やり実装

とはいえ、SQLもPHPもwordpressもいまいち分かっていない私。
実装の内実は酷いものです・゚・(ノД`)・゚・

  • 戻れるのは全記事時系列一覧のみ(つまりカテゴリ無視)
  • コアファイルを直接書き換えている(つまりバージョン変更でお陀仏)

等々、まだまだ問題が山積。

実装方法(仮)

ここから進めるかどうかも怪しいですが(仮)と言わせてください(ノ∀`)

wordpressのバージョンは2.5.1
query.php の1426行目に以下を挿入

		//rtype
		//paged定が無くpagewith指定があれば
		if (!$_GET['paged']) {
			$pagewith = ereg_replace('[^0-9]+','',$_GET['pagewith']); //ごみを取る
			if ($pagewith) {
				$pagewithby = "and ID>$pagewith";
				$prerequest = " SELECT COUNT(*) as postCounter FROM $wpdb->posts $join WHERE 1=1 $where $pagewithby $groupby $orderby";
				$this->prerequest = apply_filters('post_counter_request', $prerequest);
				$this->postposition = $wpdb->get_results($this->prerequest);
				//$paged $limit作り直し
				$paged = floor( $this->postposition[0]->postCounter / $q['posts_per_page'] ) + 1;
				$pgstrt = ($paged -1) * $q['posts_per_page'];
				$q['paged'] = $paged;
				$limits = 'LIMIT '.$pgstrt.','.$q['posts_per_page'];

			}
		}

同、link-template.php の611行目に以下を挿入

	$request = remove_query_arg( 'pagewith' );

後は、単体記事のスキン(single.php)のそれっぽいところから
<a href=”<?php bloginfo(‘url’); ?>/?pagewith=<?php the_ID(); ?>#post-<?php the_ID(); ?>”>等とリンク。

未消化の課題

  • カテゴリで抽出したリストに飛びたい
  • プラグイン化したい

とりあえず、この二つくらいは何とかしたいものです。
と言うか、どなたかやってくださいヽ(・∀・)ノ
と言うか、このくらいの機能、標準でつけやがれこのやろうです(笑)

Comments (1)

amazonリンクを張った投稿が楽になるプラグイン、WP-Amazon-ReloadedがバージョンアップしてJPに正式対応していました。
以前はちょこっと書き換えて使っていたのですが、これでその必要も無くなり安心安心。IE7でも問題なく動いてます。

コメントは受け付けていません。

以前、ブログインターフェイスの違和感が分かったに書いた「単体記事から、前後数件のリストに飛べない」と言う問題についての考察。
next_post_link こそあるのですが、

  1. 前後1件のみ
  2. 子カテゴリを反映しない
  3. 複数カテゴリを持つ記事の扱いが荒っぽい

等々、イマイチ、イマ3です。しかし、記事のカテゴリ情報に順位付けが無い(本当はあったりしますか?)事もあり、2や3の実装に関しては論理的にできないとも。まずは、理想形を考える必要がありそうです。

飛びたいリストは

単体記事のページからジャンプしたくなる、その記事が含まれたリストは、

  • 単純時系列リスト
  • 同カテゴリの時系列リスト(子カテゴリ含む・含まない)
  • 人気や評価順リスト
  • 同タグの時系列リスト
  • それらに内容なども加え複合的に解析・分析した順

こんな感じでしょうか。

単体記事ページ内にもリストを表示したい

リストから記事に来た場合でも、いちいち別タブ・別窓を使ったり、バックボタンでリストにもどったりするのは億劫です。
単体記事ページの一部がリストになっていれば最高です。
ここで「上記のどのリストを表示するか」と言う問題があります。

リストページからたどり着いた場合

時系列アーカイブなりブログ内検索結果なりのリストページが先にあり、そこから単体記事ページに飛んできた場合。
少なくともデフォルト表示はそのリストであるべきでしょう。
記事が複数のカテゴリを持っている場合なども踏まえると「直前のリストページ」の情報を継承する必要がありそうです。

ポンと単体記事ページへたどり着いた場合

googleや他ブログからのリンク、ブックマークなどから、リストを経ずに直接、単体記事ページにたどり着く事も想像に難くありません。これらの場合、継承すべき直前のリストページが存在しない事になります。
まぁ、デフォルトは、ブログの性質にもよりますが、単純時系列か同カテゴリのリストで良さそう。

リストを切り替えたい

どんなたどり着き方をしたにせよ、例えば、単純時系列から、同カテゴリの記事リストのみに絞りたいなど、他のリストに切り替えたくもなるでしょう。よって、

  • この記事を含む時系列記事リストへ
  • この記事を含む同カテゴリ時系列の記事リストへ

のようなリンクも必要でしょう。
もっとも、これらを妙に増やしすぎても直感的でありませんので、
リストへ飛ぶ
精々こんな感じでしょうか。シンプルにするなら「時系列」に絞り、リッチにするなら件数指定等々…

コメントは受け付けていません。

SyntaxHighlighterを入れてみました。

表示のズレ

私の環境ではcssが被って表示がずれてしまったので、SyntaxHighlighter.css を微調整。1行目にカンマを入れw6,7行目を追加。むむ、なんか変更点を文章で表現するのは早速格好悪いですね・゚・(ノД`)・゚・

.dp-highlighter,
.dp-highlighter ol,
.dp-highlighter ol li,
.dp-highlighter ol li span
{
	margin: 0 !important;
	padding: 0 !important;
	font-weight: normal;
	font-family: "Consolas", "Monaco", "Courier New",
	Courier, monospace !important;
	font-size: 12px;
}

専用タグを拡張

[code='css'] ここにコードを書く [/code]
等とするのがこのプラグインの書式です。
非常に便利なのですが、専用タグはなんかこう、ムズムズします。プラグインを変えた場合にコードとして扱われなってしまう痒さ。もっとも、専用タグを一括置換してしまえば良い気もします。
今回は、<pre>タグも専用タグとして使えるよう弄ってみました。

書き換えたソースも説明してみるつもりだったのですが、該当部が専用タグそのものなので上手く使えず・゚・(ノД`)・゚・
いきなり大失敗の予感です。

コメントは受け付けていません。

一覧機能が弱い

前々から、なんかブログって使い辛いと感じていました。

  • 人によってインターフェイスが違うからかな
  • 広告が多くて、記事の場所が分かりにくいからかな

と薄々思っていましたが、決定的なのは、

  • 単体記事から、前後数件のリストに飛べない

これですね。わかります。
最新記事からつらつら読む分には、ページャーもあり便利なのですが、例えば、検索エンジンから単体記事に飛んだ場合。
「関連記事」や「前後1件」のリンクこそあれど、いや、俺が飛びたいのは、ずらーっと時系列でならんだアレなんだよー!!と。
最新記事から順にさがせっていうのかよぉーーあsdふぁldkfj です。
あのブログのあの記事!前見たアレがみたいのに~!なんとなく前後関係で覚えているのに「カレンダー」や「アーカイブ」なんてまどろっこしい。

ソリューションが見つからない((((゜д゜;))))

「前後1件」だけだよって\(^o^)/
まだ深く考えていませんが、これって、ページャー(このサイトの場合「wp-pagenavi」)に機能追加するのが楽なんですかね?
さらっとソースをみた感じでは、少なくとも今の私には手に負えない。しかし、検索なんかよりよっぽど負荷も軽いと思うのですが…課題です。

next_post_linkの同カテゴリリンクにしても、子カテゴリを反映しないし(・ω・)

Comments (1)