私は彼らが特色にした画像でシングルページ/シングルリクエストの下で私が何百もの投稿を回収する必要がある仕事に取り組んでいます。
ワードプレス方式で投稿を回収し、次にget_the_post_thumbnail
関数を使用して注目の画像を個別に回収することで、ページを読み込むのに非常に時間がかかります。
誰かが1つの単一のクエリの下で遡及的な投稿や注目の画像のようなこれのためのより速い解決策を提供することができますか。それはプロセスをスピードアップするはずです。
最近同様の問題に取り組みました。おすすめの画像を含む投稿を取得するためのSQLクエリです。
global $wpdb;
$perpage = 10;
$page = 1; // Get the current page FROM $wp_query
$counter = $perpage * $page;
$uploadDir = wp_upload_dir();
$uploadDir = $uploadDir['baseurl'];
$sql = "
SELECT
post.ID,
post.post_title,
post.post_date,
post.category_name,
post.category_slug,
post.category_id,
CONCAT( '".$uploadDir."','/', thumb.meta_value) as thumbnail,
post.post_type
FROM (
SELECT p.ID,
p.post_title,
p.post_date,
p.post_type,
MAX(CASE WHEN pm.meta_key = '_thumbnail_id' then pm.meta_value ELSE NULL END) as thumbnail_id,
term.name as category_name,
term.slug as category_slug,
term.term_id as category_id
FROM ".$wpdb->prefix."posts as p
LEFT JOIN ".$wpdb->prefix."postmeta as pm ON ( pm.post_id = p.ID)
LEFT JOIN ".$wpdb->prefix."term_relationships as tr ON tr.object_id = p.ID
LEFT JOIN ".$wpdb->prefix."terms as term ON tr.term_taxonomy_id = term.term_id
WHERE 1 ".$where." AND p.post_status = 'publish'
GROUP BY p.ID ORDER BY p.post_date DESC
) as post
LEFT JOIN ".$wpdb->prefix."postmeta AS thumb
ON thumb.meta_key = '_wp_attached_file'
AND thumb.post_id = post.thumbnail_id
LIMIT ".$counter.",".$perpage;
$posts = $wpdb->get_results( $sql, ARRAY_A);
ボーナス :必要に応じて投稿の詳細とともにカテゴリの詳細も表示されます。
P.S :あなたはあなたの要求に合うようにそしてあなたが望むフィールドを得るためにクエリを少し変える必要があるでしょう。
投稿画像と注目画像のURLはwp_postsテーブルに保存され、その関係はwp_postmetaテーブルに保存されるため、いずれの場合も単一のクエリで直接クエリするか、WordPress関数を使用して個別にクエリする必要があります。
両方のテーブルを1つのクエリでクエリしてもパフォーマンスが向上するとは思われませんが、必要に応じて以下のカスタムコードを使用できます。
global $wpdb;
$results = $wpdb->get_results( "SELECT * FROM $wpdb->posts, $wpdb->postmeta where $wpdb->posts.ID = $wpdb->postmeta.post_id and $wpdb->postmeta.meta_key = '_thumbnail_id' and $wpdb->posts.post_type='post' limit 100");
if ( $results )
{
foreach ( $results as $post )
{
setup_postdata( $post );
?>
<h2>
<a href="<?php the_permalink(); ?>" rel="bookmark" title="Permalink: <?php the_title(); ?>">
<?php the_title(); ?>
</a>
</h2>
<?php
if ( $post->meta_value ) {
$image = image_downsize( $post->meta_value );
?>
<img src="<?php echo $image[0]; ?>" />
<?php
}
}
}
else
{
?>
<h2>Not Found</h2>
<?php
}
無限スクロール方式を使用してページの読み込み速度を管理できます。折り目の上に表示されているスクロールと他の投稿を検索できるスクロールのみを取得すると、ページをすばやく読み込むことができます。これがチュートリアルです。
https://code.tutsplus.com/tutorials/how-to-create-infinite-scroll-pagination--wp-24873
投稿用の無限スクロール用のプラグインがいくつかあります。
これは、複雑な結合を一切使用せずにはるかに簡単な解決策です。
SELECT wp_posts.id,
wp_posts.post_title,
wp_terms.name,
(SELECT guid
FROM wp_posts
WHERE id = wp_postmeta.meta_value) AS image
FROM wp_posts,
wp_postmeta,
wp_term_relationships,
wp_terms
WHERE wp_posts.id = wp_term_relationships.object_id
AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id
AND wp_terms.name = 'mycat'
AND wp_posts.post_status = "publish"
AND wp_posts.post_type = "post"
AND wp_postmeta.post_id = wp_posts.id
AND wp_postmeta.meta_key = '_thumbnail_id'
ORDER BY wp_posts.post_date DESC
LIMIT 5;
このクエリは、投稿ID、投稿カテゴリ、および特集画像を提供します。あなたのカテゴリー名でwp_terms.name = 'mycat'を変更することによってカテゴリーをフィルターすることができます。