質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

2回答

4192閲覧

WordPress:query_postsが重いのでget postsにしたほうが良いのでしょうか

igaiga

総合スコア144

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2017/02/01 07:43

記事ページでquery_postsを複数使用してデータを取り込んでいるのですが、
ページを開くのに2秒くらいかかってしまいます。

phpの処理が終わらないとJavaScriptが動作しないのか、
スライドショーもその間動作しないようで2秒間画像が縦並びになります。

query_postsは重くなるから使わない方がいいと良くネット上で書かれていますが、
実際にget postsを使用すると値が直接取れないので、
さらにget_postで値を拾わないといけないのかと思います。

ご相談したいのは、get_postsとget_postで2回データベースにアクセスするのであれば、
対して変わらないのではないかと思うのですがどうなんでしょうか。
(query_postsも2回データベースを読んでいるそうなので)

###現状のソース

<div class="aside"> <?php // レコメンドもどき機能 if($placenum){ $taxquerysp[] = array( 'taxonomy'=>'タクソノミー名', 'terms'=> 'ターム名', 'include_children'=>false, 'field'=>'slug', 'operator'=>'AND' ); } query_posts( array( 'post_type' => "カスタム投稿タイプ名", 'tax_query' => $taxquerysp, 'posts_per_page' => 5, )); if(!empty($wp_query->found_posts)){ // 記事表示のループ if ( have_posts() ) : ?> <div class="aside_mansion aside_mansion_ms mb20"> <p class="check_mansion">近隣物件</p> <?php while ( have_posts() ) : the_post(); ?> <a href="<?php echo get_permalink(); ?>"> <dl> <dt><img src="<?php echo esc_html( $post->gaikan); ?>" alt="" width="153"></dt> <dd class="name"><?php the_title();?></dd><?php if(!empty($post->sale_price_min)|!empty($post->sale_price_max)){; ?> <dd class="price">価格:<span class="strong_orange"><?php echo number_format_i18n((int)$post->sale_price_min/10000)."</span>万円"; ?> - <span class="strong_orange"><?php echo number_format_i18n((int)$post->sale_price_max/10000)."</span>万円"; ?></dd> <?php }; ?><?php if(!empty($post->rent_price_min)|!empty($post->rent_price_max)){; ?> <dd class="price">賃料:<span class="strong_orange"><?php echo number_format_i18n((int)$post->rent_price_min/10000)."</span>万円"; ?> - <span class="strong_orange"><?php echo number_format_i18n((int)$post->rent_price_max/10000)."</span>万円"; ?></dd> <?php }; ?> <dd class="area"><?php echo $post->position ; ?></dd> </dl> </a><br> <?php endwhile; else: endif; wp_reset_query(); } ?> </div> </div><!--aside-->

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

query_posts の代わりに使うのであれば pre_get_posts のほうがDBアクセスを減らせる可能性が上がります。ページが呼ばれるたびにメインクエリのためのDBアクセスが発生するため、テンプレートで使わなくても必ず1回アクセスします。

【WordPressの新・旧ループからカスタムクエリ・アーカイブまで徹底解説 | OXY NOTES】
http://oxynotes.com/?p=8615

【[Wordpress]pre_get_postsを使いこなす!pre_get_posts使い方まとめ | EMiAC-Works】
https://emiac-works.com/coding/pre-get-posts-code-snipet/

投稿2017/02/02 06:55

kei344

総合スコア69400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

igaiga

2017/02/02 07:01

ありがとうございます。メインループで使いたい場合は、pre_get_posts。サブループで使いたい場合は、get_postsと考えて良いのでしょうか?
kei344

2017/02/02 07:07

それでいいと思います。 get_posts のかわりに WP_Query を直接使うことも出来ます。 $my_wp_query = new WP_Query( $args ); while ( $my_wp_query->have_posts() ) : $my_wp_query->the_post(); //ループ endwhile; wp_reset_postdata();
guest

0

ベストアンサー

↓にもありますがget_postsをお勧めします。
DBサーバへのリクエスト回数は極力控えるほうがいいと思います。
http://www.m-hand.co.jp/program/4119/

ただ、直接値が取れないという状況がどういう状況なのかは把握しかねますが。。。

phpの処理が終わらないとJavaScriptが動作しないのか、
スライドショーもその間動作しないようで2秒間画像が縦並びになります。

お察しのとおり、ajaxやwebSocketなどの非同期通信を除いてサーバーサイドのスクリプトが(またはWEBアプリケーション)の処理が最初に実行されます、ViewにPHPからのassetsを出力してからクライアントサイドの処理が走ります。
https://www.htmlhifive.com/conts/web/view/study-room/introduction-to-web-applications

投稿2017/02/01 08:00

Neko_doshi

総合スコア214

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

igaiga

2017/02/01 08:50

早速のご回答有り難うございます! >ただ、直接値が取れないという状況がどういう状況なのかは把握しかねますが。。。 カスタムフィールドの値が取れなかったので、get_postとか必要なのかと思ってました。 setup_postdata()とかかな?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問