wordpress:投稿記事を決まった順序で出力する

「初歩からのゲーム理論」は講義形式のために、ある決まった順序で読んでもらう必要がある。しかし投稿は必ずしもその順番に作成しているわけではないので、日付順に並べられても困る。日付を書き換えるという手もあるが、やりたくはない。意外と簡単にできたので記しておく。

(1)カスタムフィールドの作成

カスタムフィールド ‘syoho_od’ を作って、そこに並べたい順番に番号をつけた。途中で、順番を変えたり、新しい投稿を途中から挿入することも考え、1から順番につけるのではなく、いくつかの「章」に仮に分け、0章は1,2,3…、1章は101,102,103…、2章は201,202,203、のように番号付けをした。

各章にはそれほど多くの記事はない。したがって、新しい記事を途中から挿入したくなったとき、例えばそれを1章の4番めに入れたかったら、104をつけて、現在の104以降の番号を105,106,107…とつけ直し1章の番号を振り直すだけで足りるからである。

カスタムフィールドの作成についてのweb記事はいろいろあるが、これやこれ簡単。プラグインを入れないと作れないように読める記事もあるので注意。

(2)カテゴリ’gametheory_lecture’が呼び出されたときのみの処理

自分のwordpressでは、カテゴリ 「初歩からのゲーム理論」 が呼び出されたときのみ、違う処理が呼び出されることになっており、その内容が’list_web_kougi1.phpに書かれている。これについてはこちら(「投稿の最初の200字だけを出力」)を参照。

そのクエリの設定に ’meta_key’ => ‘shoho_od’, 、 ‘orderby’ => ‘meta_value_num’ を付け加える。詳しくはこちら

  • orderby は投稿の並べ替えを指定するパラメータで、初期値は’date’。なので何もしないと日付順に並べられれている。
  • orderbyにmeta_value_numを指定すると、メタフィールドの値で、並べ替えを行う。
  • このmeta_value_numは meta_key が指定されているときのみ有効なので、 meta_key に shoho_odを指定する。
  • ‘order’ => ‘ASC’も加える。これは昇順での並べ替えを示す。

‘list_web_kougi1.php の詳しいコードは以下の通り。

<!-- 記事を200字出力し、続きを読むにリンクを貼る出力 -->

<h2>初歩から学ぶゲーム理論-WEB講義</h2>
<h3>最新の投稿</h3>
<ul>
<?php
$wp_query = new WP_Query();
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'category__in' => 8,
'posts_per_page' => 20,
'meta_key' => 'shoho_od',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
$wp_query->query($args);
if($wp_query->have_posts()){
?>
<?php
while (have_posts()) {
the_post();
?>
<!-- 出力部分 -->
<?php $naji_title=get_permalink(); ?>
<h4><a href="<?php echo $naji_title; ?>"><u>
<?php the_title(); ?></u></a></h4>
<?php
if(mb_strlen($post->post_content,'UTF-8')>200){
	$content= str_replace('\n', '', mb_substr(strip_tags($post-> post_content), 0, 200,'UTF-8'));
	echo $content.'<a href='.$naji_title.'><u>(.....続きを読む)</u></a>';
}else{
	echo str_replace('\n', '', strip_tags($post->post_content));
}
?>
<!-- 出力部分 -->
<?php
}
wp_reset_query();
}
?>