根据关键字和值计算post meta,并获得meta计数,而不是post计数



我使用WordPress元数据来注册图像点击量,以了解每个用户点击了哪些图像,以及每个用户点击的图像总数。第一部分很好,但我很难让计数器继续运行,因为它返回的元数据量比实际数据量少。

我有一个自定义的帖子类型gallerier,每个图库都有很多图片。我使用元密钥nedlasting,通过获取url来单独识别每个图像。

以下是我如何注册点击,在检查后它还没有:

// Add meta query if it doesnt already exist
function sjekk_nedlasting( $postid, $url, $dato) {
$brukerid = (string)get_current_user_id();
// Check if the image is downloaded previously
$args = array(
'post_type' => 'gallerier',
'meta_query' => array(
array(
'key' => 'nedlasting',
'value' => sprintf(':"%s";', $url),
'compare' => 'LIKE'
),
array(
'key' => 'nedlasting',
'value' => sprintf(':"%s";', $brukerid),
'compare' => 'LIKE'
)
),
'fields' => 'ids'
);
// Perform the query
$nedl_query = new WP_Query( $args );
$nedl_ids = $nedl_query->posts;
// If not already downloaded, register it
if ( empty( $nedl_ids ) ) {
$metaarray = Array(
'user_id' => $brukerid,
'url' => $url,
'date' => $dato
);
add_post_meta( $postid, 'nedlasting', $metaarray );
}
}

然后我尝试使用以下功能来计算那些注册的点击:

// Count number of downloads for a single user
function tell_nedlastinger() {
$brukerid = (string)get_current_user_id();
$args = array(
'post_type' => 'gallerier',
'meta_query' => array(
array(
'key' => 'nedlasting',
'value' => sprintf(':"%s";', $brukerid),
'compare' => 'LIKE'
)
),
'fields' => 'ids'
);
// perform the query
$nedl_query = new WP_Query( $args );
$nedl_ids = $nedl_query->posts;
return count($nedl_ids);
}

该函数返回一个数字,但总是远低于实际注册的元数据/点击量。有人看到问题了吗?

编辑:我很确定问题是我得到的是帖子的总数,而不是元数据条目/点击的总数——通常情况下,不是每个帖子几个。有什么办法吗?

我从未找到查询元数据并在每个帖子中获得x个结果的解决方案,所以我没有在单个关键字中使用数组,而是将帖子元数据拆分为三个关键字。然后我使用$wpdb进行自定义查询。tell_nedlastinger()函数的最终代码:

$brukerid = (string)get_current_user_id();
global $wpdb;
$query = $wpdb->get_results("SELECT * FROM wp_postmeta WHERE (meta_key = 'nedlasting_brukerid' AND meta_value = '$brukerid')");
return count($query);

您可以通过使用来提高速度

$brukerid = (string)get_current_user_id();
global $wpdb;
$count = $wpdb->get_row("SELECT COUNT(*) AS THE_COUNT FROM $wpdb->postmeta WHERE (meta_key = 'nedlasting_brukerid' AND meta_value = '$brukerid')");
return $count->THE_COUNT;

只需从数据库中提取一行就可以提高速度。还要注意使用:

FROM $wpdb->postmeta

这允许一个可变的表前缀,而不是假设一个表wp_前缀。

$metaCount=计数(get_comment_meta($postId,'key','value'));

最新更新