投稿をアルファベット順にならべインデックス化する

Posted: 1月 14th, 2010 | Author: admin | Filed under: plugin, wordPress | No Comments »

記事をインデックスをつけてアルファベット順一覧にしたい。

例によってwordpress.orgでサーチすると、以下がよさそうだ。

http://wordpress.org/extend/plugins/azindex/

しかし、こちらは一ページにすべてのタイトルを表示するので、量が多い場合醜くなる場合があり、用語解説的な用途と思われ、今回はパス

その他を検討した結果こちらのプラグインに

http://wordpress.org/extend/plugins/wp-snap/

 

こちらのプラグインの欠点としてページングの機能がない。そして、すべてを表示のとき、アルファベット順に表示される。すべて表示は時系列にさせたい。なぜなら、アルファベット順はタグ化されるのでいらないから。3っ箇所強引に変更することにした。

1.RECENT指定のときは、wordPressの標準の機能をつかう

$wp_query->post_count = count($all_posts);
        $wp_query->posts = $all_posts;

if ($this->first_letters !== NULL) {

        $wp_query->post_count = count($all_posts);
        $wp_query->posts = $all_posts;
    }

上記の処理によって、アルファベット指定されていないとき、配列のポインター処理がスキップされる。すなわちwordPressの標準機能で動作する。

2.すべて表示の場合は、wordPressの標準のページング機能を使用する

以下のコードと適当なテンプレートに挿入する

<?php if($_GET["snap"]==NULL){ ?>
<div class="navigation">
            <div class="alignleft"><?php next_posts_link(‘&laquo; Older Entries’) ?></div>
            <div class="alignright"><?php previous_posts_link(‘Newer Entries &raquo;’) ?></div>

これによってアルファベット指定されていないとき、wordPressの標準ページング機能が動作する

3.ALLの表示をタブに追加する

 

// Check if ALL posts are to be displayed on first load
    if ($this->firstload == ‘ALL’) {
        $results .= $num_tabs . "\t<li";
        if ($this->first_letters == ‘#0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’) {
            $results .= ‘ class="’ . $wp_snap_options['csscls2'] . ‘"’;
        } else {
            $results .= ‘><a href="’ . $url . ‘"’;
        }
        $results .= ‘>ALL’;
        if ($this->first_letters !== ‘#0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’) {
            $results .= ‘</a>’;
        }
        $results .= "</li>\n";
    }

 

を以下に変更する

$results .= $num_tabs . "\t<li";
if ($this->first_letters == ‘#0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’) {
    $results .= ‘ class="’ . $wp_snap_options['csscls2'] . ‘"’;
} else {
    $results .= ‘><a href="’ . $url . ‘"’;
}
$results .= ‘>ALL’;
if ($this->first_letters !== ‘#0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’) {
    $results .= ‘</a>’;
}
$results .= "</li>\n";

 

課題

アルファベット指定されたときのページング機能はない。おそらく配列ポインターの指定を解析し、修正すればできると思う。また、jQueryなどを使用して、ページ推移なしにページング機能を実現するのもよさそうだ。だが、アルファベット指定されたとき、全て表示されるのにクライアント側が希望したので、そのままにしておいた。ちなみにこの作者のコメントによると「ページングか、問題あるのしっているけど、時間がないんだ」だそうだ。

 

参考



Leave a Reply