[英]Does WordPress function get_post(post_id) query the database?
在我的 WordPress 主題中,主題作者首先進行數據庫查詢以獲取所有活動帖子以獲取帖子 ID,如下所示:
$SQL = "SELECT post_id FROM mytable_postmeta
WHERE meta_key = 'expiry_date' AND CAST(meta_value AS DATETIME) >='2023-01-14 12:00:00'"
$posts_found = $wpdb->get_results($SQL, OBJECT);
然后他稍后遍歷結果並通過它的 ID 獲取每個帖子,如下所示:
foreach($posts_found as $single_post){
global $post;
$post = get_post($single_post->ID);
}
我的問題是,這是否是一個數據庫查詢以獲取所有帖子 ID,然后對 foreach 循環中的每個帖子進行一個數據庫查詢? 即,get_post WordPress function 是否在循環中對每個帖子查詢一次數據庫?
如果是這樣,我可以用一種聰明的方式重寫它以減少數據庫調用的次數嗎?
當然有,試試這個:
$SQL = "SELECT post_id FROM mytable_postmeta
WHERE meta_key = 'expiry_date' AND CAST(meta_value AS DATETIME) >='2023-01-14 12:00:00'";
$post_ids = $wpdb->get_col($SQL);
$posts = get_posts([
'include' => $post_ids,
'post_status' => 'publish'
]);
甚至更好,使用meta_query
$posts = get_posts([
'meta_query' => [
[
'key' => 'expiry_date',
'value' => '2023-01-14 12:00:00',
'compare' => '>=',
'type' => 'DATETIME'
]
],
'post_status' => 'publish'
]);
是的, get_post
確實在每次調用時執行額外的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.