2014/7/23

WordPressに年月に基づいてパーツを表示する

WordPressは最早立派なCMSですが、基本的にはブログ。というわけで、今回ちょっと変わった改造をしました。年月に基づいて、扉絵的なものを表示するための方策。僕がよくやるカスタム投稿タイプにモジュールを作って、それを読み込むというやり方で実装しました。

まず2014年7月だったら、201407という名前のポストを作成します。ここで読み込む時にカスタムフィールドで必要なパーツを分けておく。

トップの場合

<?php $query = new WP_Query('post_type=cover&posts_per_page=1&paged='.$paged);?>
<?php if (have_posts()) : while ($query->have_posts()) : $query->the_post(); ?>
<?php echo get_the_post_thumbnail($post->ID, 'full'); ?>
<h1>?php echo get_post_meta($post->ID, 'month', TRUE); ?></h1>
<h2><?php echo get_post_meta($post->ID, 'catch', TRUE); ?></h2>
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>

これで最新のやつは取れますね。

月別アーカイブの場合

<?php $year = get_query_var('year'); ?>
<?php $month = sprintf('%02d', get_query_var('monthnum')); ?>
<?php $time = $year.$month; ?>
<?php $coverid = get_module_id('cover',$time); ?>
<?php if(!empty($coverid)): ?>
<?php echo get_the_post_thumbnail($coverid, 'full'); ?>
<h1><?php echo get_post_meta($coverid, 'month', TRUE); ?></h1>
<h2><?php echo get_post_meta($coverid, 'catch', TRUE); ?></h2>
<?php endif; ?>

ここでget_module_idってやってるのが味噌で、functions.phpにこういうのを用意しています。

function get_module_id( $posttype, $name) {
  $parm = array(
  'post_type'=>$posttype,
  'name'=>$name
  );
  query_posts($parm);
  if (have_posts()) : while (have_posts()) : the_post();
    return get_the_ID();
  endwhile;
  endif;
  wp_reset_query();
}

単一記事の場合

<?php $time = get_the_time('Ym'); ?>
<?php $coverid = get_module_id('cover',$time); ?>
<?php if(!empty($coverid)): ?>
<?php echo get_the_post_thumbnail($coverid, 'full'); ?>
<h1><?php echo get_post_meta($coverid, 'month', TRUE); ?></h1>
<h2><?php echo get_post_meta($coverid, 'catch', TRUE); ?></h2>
<?php endif; ?>

これで月の名前で投稿作っていけば、随時、それがページのパーツとして反映されることになります。便利や。

ひとり仕事: フリーランスという働き方
(2012-10-5)
売り上げランキング: 14,705
100円
WordPressデザインレシピ集
狩野 祐東
技術評論社
売り上げランキング: 197,569
WordPress 高速化&スマート運用必携ガイド
こもりまさあき 岡本渉
エムディエヌコーポレーション
売り上げランキング: 435,263