Ktai Styleでサイトを構成していて、要望があったので構築した際のメモ書き。
携帯サイトを構成した場合のfooterメニューにアーカイブやカテゴリーというリンクがある(defaultテーマの場合、今回の場合はdefaultテーマを利用した改造テーマ)。
このカテゴリーをクリックし、カテゴリー一覧から個別ページへ飛んだ際に、ページ下部に表示される次の記事へのリンクと前の記事へのリンクは全体の記事の前後リンクになる。
これを、カテゴリー一覧から飛んだときにはカテゴリーに絞り込んでの前後リンクにしてほしいと要望があった。
まあ前後リンクをカテゴリーに絞るのは難しくはない。が、single.phpで前後リンクをカテゴリーに絞ってしまうと、TOPページなどからカテゴリに関係なく飛んできた場合も、カテゴリ毎のリンクになってしまう。
まあ、だからカテゴリ一覧から飛んできた場合、カテゴリに絞ってシングルページを見ている場合にはカテゴリに絞ったリンクを表示するように分岐を設けただけなんだけど。
まず、最初の改造。(全てテーマのみの改造、コアは修正していない)
category.phpを作成して一覧リンクを生成する際に「?category=1」を挿入する。
<dl> <?php for ($count = $ks_settings['ol_count']; have_posts() ; $count++) : the_post(); ?> <dt><?php $link = ks_ordered_link($count, $ks_settings['ol_max'], get_permalink(), get_the_title(), '%link', false, false); $pattern = "/(.*\.html)(.*)/i"; echo preg_replace( $pattern, '$1?category=1$2', $link ) . ' '; ?> <img localsrc="46" alt="@ " /><font color="<?php echo ks_option('ks_date_color'); ?>"><?php ks_time(); ?></font></dt> <?php endfor; ?> </dl>
ソースのほとんどはdefaultのものなので一部のみ記述。
ks_ordered_linkをecho=falseして取得した後に「?category=1」を追加しているだけ。
次にsingle.phpを改造。
こちらは「?category=1」があることを確認して表示するリンクを分岐で分けているだけ。
if($_GET['category']) { $category = htmlspecialchars($_GET['category']); }
ページの先頭でとりあえずGETしておく。
if( $category ) { $previous_post = ks_previous_post_link(array('format' => '<div align="left"><img localsrc="7" alt="« ">*.%link</div>', 'in_same_cat' => true, 'echo' => false)); $next_post = ks_next_post_link(array('format' => '<div align="right">#.%link<img localsrc="8" alt=" »"></div>', 'in_same_cat' => true, 'echo' => false)); $pattern = "/(.*\.html)(.*)/i"; echo preg_replace( $pattern, '$1?category=1$2', $previous_post ); echo preg_replace( $pattern, '$1?category=1$2', $next_post ); } else { ks_previous_post_link('<div align="left"><img localsrc="7" alt="« ">*.%link</div>'); ks_next_post_link('<div align="right">#.%link<img localsrc="8" alt=" »"></div>'); }
やっていることはほぼ一緒。$categoryを調べてカテゴリーを絞る必要がある場合はks_previous_post_linkでin_same_catをtrue、echoをfalseにしてカテゴリに絞られたリンクを生成し一時取得。前後リンクに同じく「?category=1」を付加することで次のページに飛んでも絞込みを有効にしている。
それ以外の場合は普通に表示した。
Ktai Styleのコードを使用して行っているが、PC版でもコードも使用方法もほぼ一緒なので、同じことは簡単にできそう。