私は空ではない2つのカスタムフィールドを持つ2つの投稿タイプから投稿を選択するためにWP_Query
インスタンスを使用する新しいテーマのためのカスタムテンプレートに取り組んでいます。サイトのセクションによっては、検索するカテゴリを決定するために$current_zone
変数を設定することができます。
// Custom loop
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$custom_loop_args = array(
'post_type' => array('videos', 'post'),
'post_status' => 'publish',
'ignore_sticky_posts' => 1,
'paged' => $paged,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'article_source',
'compare' => '!=',
'value' => ''
),
array(
'key' => 'article_link',
'compare' => '!=',
'value' => ''
)
)
);
// Check the current zone
global $current_zone;
// Check for category match to current zone
if ( term_exists($current_zone, 'category') ) {
$term = get_term_by('name', $current_zone, 'category');
$custom_loop_args['cat'] = $term->term_id;
}
// Create unique identifier for caching
$cache_id = ( isset($term) ) ? '_term-' . $term->term_id : '_main';
// Run query or get transient cache
if ( ( $custom_loop = get_transient( "curated_wpquery$cache_id" ) ) === false ) {
// It wasn't there, so regenerate the data and save the transient
$custom_loop = new WP_Query( $custom_loop_args );
set_transient( "curated_wpquery$cache_id", $custom_loop, ( 60 * 60 * 1 ) );
}
私はこれをスピードアップするためにトランジェントを使っていますが、これはうまくいきますが、最初のクエリは完了するまでに35秒かかり、狂った量のメモリを必要とします。 posts
テーブルには約10,553レコードのある、とても大きなデータベースがあります。改訂をクリアしましたが、パフォーマンスの向上に気づいたことはありません。
それで、私の本当の質問は、このクエリのパフォーマンスをどのように向上させることができるかということです。カスタムの$wpdb
クエリが最善でしょうか、それともカスタムフィールドへのこのような方法での問い合わせは全く生産的ではないでしょうか。
任意の助けは大歓迎です。
カスタムフィールドデータはpostmeta
テーブルに格納されているので、このテーブルをスキャンすると遅くなる可能性があります。
あなたがすべき:
EXPLAIN
と入力します。これにより、何が起こっているのか、そしてどのように進めるのかについて、より良いアイデアが得られます。