投稿日時の古い順に表示する 『wordpress』


「wordpress」では投稿するとデフォルトでは投稿日の新しいのが上に来るように表示されます。
日記なので新しいのが上にくるのは通常だと思うが、アーカイブやカテゴリーごとの一覧では、古いのを上にして読む方が読みやすい場合があります。
ということで、投稿日の古いものから順に表示されないか調べてみました。
 

結論から言うと、投稿内容を表示する前に
<?php query_posts('order=ASC'); ?>
を1行追加するだけでした。 

このままでは、現カテゴリ情報とか維持できてないので
どのアーカイブを選んでも全投稿が出てしまいました。
そこで、現条件を維持させる為、 
【$query_string】の文字列を追加したらいいみたいです。

<?php query_posts($query_string .'&order=ASC'); ?>

投稿部分を表示している箇所は大体次のような形になっています。
<?php query_posts($query_string .'&order=ASC'); ?>
<?php while (have_posts()) : the_post(); ?>  ※ループ開始
           投稿内容
<?php endwhile; ?>                  ※ループ終了

アーカイブ表示デザイン変更」に簡単な表示部分の説明書いてますのでよかったら参考にしてください。

**********************************************************
以下はプログラムの流れの解析。暇な人だけ読んでください。
**********************************************************
<?php query_posts('order=ASC'); ?> 
       ↓
①「query.php」>>function &query_posts($query) 
   処理:
   $GLOBALS['wp_query'] =& new WP_Query();
   return $GLOBALS['wp_query']->query($query);

  ※WP_Query() オブジェクトを作成し、クラス内のqueryメソッドに渡してます。

②「query.php」>>class WP_Query >> function &query($query)
   処理:   
    $this->parse_query($query);
          ⇒⇒class WP_Query >> function parse_query ($query)
             処理       
             parse_str($query, $this->query_vars);          
               ※クラス内変数に query_vars['order'] = "ASC"

    return $this->get_posts();
          ⇒⇒class WP_Query >> function &get_posts()
                             処理
             $q = &$this->query_vars;
               ※query_vars['order'] = "ASC" なので、
                 $q['order'] = "ASC"
                           
$q['orderby'] =
                 "$wpdb->posts.post_date ".$q['order'];  

                $orderby = $q['orderby'];
             $this->request =
                " SELECT $found_rows $distinct $fields
                 FROM $wpdb->posts $join
                 WHERE 1=1 $where
                 $groupby $orderby $limits";
 
                 ※sql文を作成してこの後実行
 
※表示する前に、再度条件を変更したクエリを発行して、
 クラスに格納している結果データを入れ替えているようです。
 2回クエリを発行することになるので、通常より処理が遅くなるかもしれません。 
                


「投稿日時の古い順に表示する 『wordpress』」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です