私の環境では記事下に出す関連記事がWP_Queryを使っていて、全件数を取得する必要のないところなので、no_found_rowsをtrueが使えるはずです。
修正方法
参考:WordPressで今読んでいる記事と同じカテゴリーの投稿を関連記事として表示する | 福岡市のホームページ制作・SEO対策ならアイドットデザイン$args = array(
'post__not_in' => array($post -> ID), // 今読んでいる記事を除く
'posts_per_page'=> 10,
'category__in' => $category_ID,
'orderby' => 'rand', // ランダムに記事を選ぶ
);
上記のコードを
$args = array(
'post__not_in' => array($post -> ID), // 今読んでいる記事を除く
'posts_per_page'=> 10,
'category__in' => $category_ID,
'orderby' => 'rand', // ランダムに記事を選ぶ
'no_found_rows' => true
);
このように「'no_found_rows' => true」を追加するだけ。
まずは、SQLがどう変わったかを調べる
「WordPress › Query Monitor « WordPress Plugins」を使用して調べました。no_found_rowsをfalse(初期値)
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
LEFT JOIN wp_term_relationships
ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE 1=1
AND wp_posts.ID NOT IN (15597)
AND ( wp_term_relationships.term_taxonomy_id IN (19) )
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private')
GROUP BY wp_posts.ID
ORDER BY RAND()
LIMIT 0, 6
SELECT FOUND_ROWS()
no_found_rowsをtrue
SELECT wp_posts.ID
FROM wp_posts
LEFT JOIN wp_term_relationships
ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE 1=1
AND wp_posts.ID NOT IN (15597)
AND ( wp_term_relationships.term_taxonomy_id IN (19) )
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private')
GROUP BY wp_posts.ID
ORDER BY RAND()
LIMIT 0, 6
結果
・1つめのSQLに「SQL_CALC_FOUND_ROWS」がつかなくなっている・2つめのSQL「SELECT FOUND_ROWS()」が全件数を調べるもので、なくなっている
・SQL_CALC_FOUND_ROWSがつかない
・SQL発行が1つ減る
この2つの要素で、少しは早くなるとは思う。
記事には直接関係ない話
デフォルト値は 'publish' です。しかしユーザーがログイン中なら、'private' が追加されます
関数リファレンス/WP Query - WordPress Codex 日本語版
記事の内容には関係ないけど、「wp_posts.post_status = 'private'」がついてるのはおかしいと思ったのですが、どうも上記の仕様なのでこのままで問題なさそうですね。
補足
・リストから絞り込んで取得すると共にトータル件数を取得 - わっふるわっふる・SQL CALC FOUND ROWSを使う - dondari
・WordPressのアーカイブページで表示件数を絞りページングさせない方法 | ウェブタタン
・WP_Query関数のno_found_rowsパラメータ | てらこや.work
・Speed up WordPress WP_Query and query_posts functions
スポンサーリンク
コメントを残す