【问题标题】:WordPress Find ID of a Post with a specific meta valueWordPress 查找具有特定元值的帖子的 ID
【发布时间】:2021-09-23 06:20:35
【问题描述】:

我在这里有大约 25,000 个帖子(并且还在增加)。所有这些都在自定义帖子类型“潜在客户”下。 每个帖子都有元信息,包括一个名为“uniqid”的变量。 这个 uniqid 是一个 url 参数。现在我需要这个 uniqid 所在的帖子 ID。

现在我的问题是是否有办法加快这一决定。

wp_query 和 get_results 一次我尝试了 2 种方法。

我之所以问,是因为这个确定帖子 ID 的函数总是被插件“查询监视器”指出它很慢。

这是两种方法,都有效。我只是想知道这里是否可以加速?

WP_Query 解决方案。

$post_id = false;
$args = array(
    'posts_per_page'    =>  -1,
    'post_type'         =>  'lead',
    'fields' => 'ids',
    'orderby' => 'date',
    'order'   => 'ASC',
    'post_status'       =>  'publish',
    'meta_key'          => 'uniqid',
    'meta_value'        => $uniqid
);

$query = new WP_Query( $args );


if( $query->have_posts() ) {
    while( $query->have_posts() ) {
        $query->the_post();

        // Get Post ID for return
        $post_id = get_the_id();

        // Break loop, when matching id was found       
        $uniqidGPM = get_post_meta( $post_id, 'uniqid' , true );

        if($uniqidGPM == $uniqid) {
            $post_found = true;
            break;
        }

    }
}

wp_reset_postdata();
return $post_id;

select get_results 解决方案。

$post_id = false;
global $wpdb;

$selectQuery = "SELECT wp_wkdm_posts.ID FROM wp_wkdm_posts  INNER JOIN wp_wkdm_postmeta ON ( wp_wkdm_posts.ID = wp_wkdm_postmeta.post_id ) WHERE 1=1  AND ( ( wp_wkdm_postmeta.meta_key = 'uniqid' AND wp_wkdm_postmeta.meta_value = '".$uniqid."' )) AND wp_wkdm_posts.post_type = 'lead' AND ((wp_wkdm_posts.post_status = 'publish')) GROUP BY wp_wkdm_posts.ID ORDER BY wp_wkdm_posts.post_date ASC";
$selectQueryResult = $wpdb->get_results($selectQuery);

if (empty($selectQueryResult)) {
    return $post_id;
}else{
    $post_id = $selectQueryResult[0]->ID;
    return $post_id;
};

【问题讨论】:

  • 第一次尝试循环内的检查有什么意义?您已经受到限制,只能在查询本身内设置此唯一 ID 的帖子。
  • 另外,按日期(或按任何东西,真的)排序的意义何在 - 您是否拥有多个具有这样“唯一”ID 的帖子?跨度>
  • 首先评估 WHERE 子句,只有在确定相关记录之后,那些才会被排序。因此,除非您可以拥有 多个 具有您正在寻找的唯一 ID 的记录,并且只想选择其中最新的记录,否则这不会给您带来任何好处。
  • 根据我的经验,我可以告诉你,一旦 postmeta 变胖,如果你想照顾性能,你就会走上一条非常糟糕的道路。你应该尽你所能避免 postmeta 变大。如果为时已晚,请尽可能多地清洁它
  • 不,帖子先过滤,再排序。 stackoverflow.com/a/24128128/1427878

标签: php sql wordpress


【解决方案1】:

请在同一个查询上使用这个 meta_query 条件,它可以帮助你。

$args = array(
    'post_type' => 'lead',
    'posts_per_page'    =>  -1,
    'post_status'       =>  'publish',
    'meta_query' => array(
        'key' => 'uniqid',
        'value' => 'YOUR_VALUE'
    )
);

$query = new WP_Query($args);

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 2019-05-18
    • 1970-01-01
    • 2016-07-05
    • 2017-08-21
    • 1970-01-01
    • 2022-06-29
    • 2014-04-08
    • 1970-01-01
    相关资源
    最近更新 更多