query_posts() よりクエリ実行の無駄が無いbc_pre_get_posts

はてなブックマーク - query_posts() よりクエリ実行の無駄が無いbc_pre_get_posts
Post to Google Buzz
Livedoor Clip - query_posts() よりクエリ実行の無駄が無いbc_pre_get_posts
Share on FriendFeed
Bookmark this on FC2 Bookmark

覚え書きφ(。。)のページで先日メモった

カスタム投稿タイプにある記事の中から最大20件の新着記事をどこかに表示したい時は…のやつ。

query_posts( 'posts_per_page=20&post_type=original'

query_postsよりも、クエリを無駄に実行しないので無駄が省けるbc_pre_get_postsのほうがステキだという情報を頂きました。
「無駄が無くていいよ」で、「早さを体感できる」ものではないです。

書き方例

functions.php

add_action( 'pre_get_posts', 'bc_pre_get_posts' );
function bc_pre_get_posts( $query ) {
	if ( is_post_type_archive( 'original' ) ) {
		$query->set( 'posts_per_page' , '20' );
		$query->set( 'order' , 'ASC' );
	}
}

上記の場合、オリジナルというカスタム投稿タイプから投稿された記事を昇順で、なおかつ、20件まで表示しますYOという意味になる。

が、気になること。

archive-original.phpをカスタムフィールド用のテーマに使っているのだけど、どういう仕組みで上記のものが実行されるのかがいまいち理解できていない。

archive-original.phpの該当箇所には、

<?php $i = 0; while ( have_posts() ) : the_post(); ?>

としか書いてない(´・ω・`)

$i = 0; コレ?
ドレ…汗

pre_get_posts
get_posts関数クエリの前に実行する。 アクション関数引数: $wp_query オブジェクトの内容(リスト形式)

と、bc_pre_get_postsは、どー違うのか。
bc_って?(; ̄ー ̄A

あと、add_actionの使い方は、覚えると、面倒な作業を削減できるし、なにやらオモシロソウなので、下記サイトを参考に、機会があればやってみようと思う。
これも、無駄の削減になりますね。

WordPressのadd_action()の使い方について教えてもらった。

add_actionについては、前も利用することを勧められたような気がしているんだけど、きっと気のせいだ。夢かもしれんし。

そして、これも大事。
スタイルシートで3カラムの横並びボックスを表示するところで、3つのうち特定のボックスにだけCSSでmargin-rightに余白を設けるやり方で、特殊なコードの書き方を見つけた。

<?php if ( 0 != ++$i % 3 ) echo 'class="mr50"'; ?>

これで、一番右側のボックスにだけ、 class=”mr50″が入らないようにしてあるみたい。
こういうこともできるんだね。すごい!

実際の書き方

<li <?php if ( 0 != ++$i % 3 ) echo 'class="mr50"'; ?>>

コメントをどうぞ

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

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Copyright