WordPress カテゴリーのページで同一カテゴリーの投稿一覧を表示

2015年11月20日

きまっし金沢の雑記帖で投稿数が多くなったのでカテゴリーの種類を増やして記事の検索をしやすくしました。
それに関連して、カテゴリー別のページを表示する際、従来は左のウインドウには、他のページと同じく新しい投稿一覧を表示したのを、同一カテゴリーの投稿一覧を表示するのに変更しました。
自分のスキル不足により、これだけのことに、かなり苦労しました。

Woedpressの管理画面の外観・・・テーマ編集・・・sidebar.php  を編集します。
最近の投稿を表示している箇所を下記のように書き換えて希望のフォーマットになりました。

<li>
<ul><?php if (is_category()): ?>
<h2>同一カテゴリーの投稿</h2>
<?php query_posts($query_string . “&order=DESC&orderby=date&showposts=-1″); ?>
<ul>
<?php if(have_posts()) : while (have_posts()) : the_post(); ?>
<a href=”<?php the_permalink(); ?>”><?php the_title(‘<li>’,'</li>’); ?></a>
<?php endwhile; endif; ?>
</ul>
<?php else : ?>
<h2>最近の投稿</h2>
<ul><?php get_archives(‘postbypost’, ’30’,’custom’ ,'<li>’ ,'</li>’); ?></ul>
<?php endif; ?>
</li>

項目名が「同一カテゴリーの投稿」でなく、カテゴリ名の表示にしたいと思い、下記のように書き換えました。

<li>
<ul><?php if (is_category()): ?>
<h2><?php single_cat_title(); ?></h2>
<?php query_posts($query_string . “&order=DESC&orderby=date&showposts=-1″); ?>
<ul>
<?php if(have_posts()) : while (have_posts()) : the_post(); ?>
<a href=”<?php the_permalink(); ?>”><?php the_title(‘<li>’,'</li>’); ?></a>
<?php endwhile; endif; ?>
</ul>
<?php else : ?>
<h2>最近の投稿</h2>
<ul><?php get_archives(‘postbypost’, ’30’,’custom’ ,'<li>’ ,'</li>’); ?></ul>
<?php endif; ?>
</li>

ついでにMovableTypeのブログのフォーマットの改善もしました。
コメント一覧の表示数を増やして従来、月日だけの表示を年月日の表示に変更しました。
月別投稿一覧にコメントも表示するようにしました。
投稿全てにカテゴリを表示させ改行し、投稿日(年月日時間も表示)とコメント投稿ボタンとで2行表示にしました。
月別投稿一覧の上部に前月(リンク付)、今月、次月のボタンを設置。

細かい改善ですが、かなり使いやすくなったと思います。

2015年12月3日

sidebar(左側のフレーム)でコメント一覧表示で投稿者の名前が長いと2行になり見栄えが悪くなるので、全角7文字まで表示するようにしたいと試行錯誤したのですが、なかなかうまくいきません。

<!–?php $author=substr(comment_author($comment_ID),0,7); ?–><!–?php echo $author ; ?–>
<!–?php $author=substr(comment_author(),0,7); ?–><!–?php echo $author ; ?–>
<!–?php mb_substr(comment_author(),0,7); ?–>

それでWordpressフォーラムに相談したら、comment_author は、その関数で出力を行ってしまうため、mb_substr などの関数を適用することはできなく、 get_comment_author を利用すれば文字制限できると教えていただけました。その場合は取得した値は、echo や print 関数などを用いて明示的に出力を行わないと表示されないということでした。

<!–?php $author = get_comment_author(); ?–>
・<!–?php comment_date(’20y/m/d’); ?–><!–?php echo mb_substr($author,0,7); ?–>

というふうにすると思い通りの表示になりました。

<h2>コメント</h2>
<ul class=”sidenavi”>
<?php
$comments = get_comments(array(‘status’ => ‘approve’, ‘number’ => 30, ‘type’ => ‘comment’));
$prev_link = “”;
foreach($comments as $comment):
$post = get_post($comment->comment_post_ID);
?>

<?php
$this_link = get_permalink($post->ID);
if( $this_link != $prev_link ) {
echo ‘

‘ . $post->post_title . ‘
‘;
}
$prev_link = $this_link;
?>
<?php $author = get_comment_author(); ?>
・<?php comment_date(’20y/m/d’); ?><?php echo mb_substr($author,0,7); ?>
<?php endforeach; ?>
<?php endif; ?>

 

コメントを残す

メールアドレスが公開されることはありません。