wordpressにて月別・カテゴリ別・タグ別で記事一覧を作成する。
全部表示なんて重たいことはしたくない。
出来れば月毎にタイトル一覧を全部表示したいなんてそんな人に。
記事内でPHPを実行できるプラグインを入れた後に以下を適用。
出来上がるとこんな感じ。
※日に日に直してます。
Archives:月別メニュー
<ul class="custom_menu"><?php // 月 $args = array( 'type' => 'monthly', 'limit' => '', 'format' => 'html', 'show_post_count' => true, 'echo' => 0 ); $links = wp_get_archives($args); print_r($links); ?></ul>
Category:カテゴリ別メニュー
<ul class="custom_menu"><?php $wp_cats = get_categories(array('hide_empty' => true)); foreach( $wp_cats as $wckey => $wcval ){ print('<li><a href="'.get_option('siteurl')."/category/".$wcval->slug.'">'.$wcval->name.'</a> ('.$wcval->count.')</li>'); } ?></ul>
Tag:タグ別メニュー
<ul class="custom_menu"><?php $wp_tags = get_tags(array('hide_empty' => true)); $first = reset($wp_tags); foreach( $wp_tags as $wtkey => $wtval ){ print('<li><a href="'.get_option('siteurl')."/?tag=".$wtval->slug.'">'.$wtval->name.'</a> ('.$wtval->count.')</li>'); } ?></ul>
記事一覧を出す
これは3環境とも使いまわせるようにまったく同じなので、お好みで外部ファイル化してもいい。
ただ『ケータイ対応プラグイン』入れてる人は、get_template_directory()とかテーマの入ってるところを基準にしてincludeすると、ケータイでnot finedとか出るから注意。
ただ『ケータイ対応プラグイン』入れてる人は、get_template_directory()とかテーマの入ってるところを基準にしてincludeすると、ケータイでnot finedとか出るから注意。
<?php query_posts($query_string.""); // list $plus = ""; if($paged){ $plus.= "&paged=".$paged; } if($_REQUEST['ctg']){ $plus.= "&cat=".htmlentities($_REQUEST['ctg'],ENT_QUOTES,"UTF-8"); } if($_REQUEST['tg']){ //$plus.= "&tag_id=".htmlentities($_REQUEST['tg'],ENT_QUOTES,"UTF-8"); $plus.= "&tag=".htmlentities($_REQUEST['tg'],ENT_QUOTES,"UTF-8"); } if($_REQUEST['archives']){ $plus.= "&m=".preg_replace("/[^0-9]/", "",$_REQUEST['archives']); }else{ if($_REQUEST['year']){ $plus.= "&year=".preg_replace("/[^0-9]/", "",$_REQUEST['year']); } if($_REQUEST['month']){ $plus.= "&monthnum=".preg_replace("/[^0-9]/", "",$_REQUEST['month']); } if($_REQUEST['day']){ $plus.= "&day=".preg_replace("/[^0-9]/", "",$_REQUEST['day']); } } if (have_posts()) : query_posts('&posts_per_page=-1&order=DESC'.$plus); //if (have_posts()) : query_posts($getlistArray); $qp_cnt = 0; while (have_posts()) : the_post(); if ($qp_cnt == 0){ $answer = ""; if (is_category()) { // category $answer.= " category:".single_cat_title('', false); } if (is_tag()) { // tag $answer.= " tag:".single_tag_title('', false); } if (is_day()) { // day $answer.= " ".get_the_time(__('Y-m-d')); }elseif (is_month()) { // month $answer.= " ".get_the_time(__('Y-m')); }elseif (is_year()) { // year $answer.= " ".get_the_time('Y'); } ?> <h3>Archives for<?php print($answer); ?></h3> <ul class="archive custom_list"> <?php } ?> <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a><small> [<?php the_time('Y-m-d') ?>]</small></li> <?php $qp_cnt++; endwhile; ?> </ul> <!--div class="navigation"> <div class="alignleft"> <?php next_posts_link(__('« Older Entries', 'kubrick')); ?> </div> <div class="alignright"> <?php previous_posts_link(__('Newer Entries »', 'kubrick')); ?> </div> </div--> <?php endif; ?> <?php wp_reset_query(); query_posts($query_string.""); ?>
これは気をつけないといけないこといくつかあったと思うけども…。
全記事表示とか重たくなるから『?archive=年月』のパラメータで内容変更出来る下記のパターンのが安全かと
<ul class="archive"><?php $get_archive = isset($_GET["archive"]) ? $_GET["archive"] : date("Ym"); $get_archive = preg_replace("/[^0-9]/", "",$get_archive); if(strlen($get_archive) >= 6) { $dates['year'] = mb_strimwidth($get_archive,0,4); $dates['month'] = mb_strimwidth($get_archive,4,2); print("<h4>Archives at {$get_archive}</h4>"); //$posts = get_posts('numberposts=100&category=5');//カテゴリで云々したい場合はこのような形 $posts = get_posts('numberposts=100&m='.$get_archive); if($posts){ foreach($posts as $post){ // ページID指定の場合 $post_url = esc_url( site_url() )."/?p=".$post->ID; print('<li><a href="'.$post_url.'">'.$post->post_title.'</a></ li>'); // パーマリンクの場合 $post_url = esc_url( site_url() )."/{$dates['year']}/{$dates['month']}/".$post->post_name; print('<li><a href="'.$post_url.'">'.$post->post_title.'</a></ li>'); } }else{ print('<li>該当記事はありません。</ li>'); } } ?></ul>
コメント