簡體   English   中英

WordPress function get_post(post_id) 是否查詢數據庫?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM