我正在使用WordPress元数据来记录图片上的点击次数,以了解每个用户点击了哪些图片 - 以及每个用户点击的图片总数。第一部分很好,但是我很难让计数器继续运行,因为它返回的元数据量比实际数据量少。
我有自定义帖子类型gallerier
,每个图库都有许多图片。我正在使用元键nedlasting
,我通过获取网址来单独识别每个图像。
以下是我在检查点击后如何注册点击次数:
// 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);
}
该函数返回一个数字,但总是远低于实际注册的元数据/点击量。有人看到问题吗?
编辑:我很确定问题是我收到了帖子的总数,而不是元数据条目/点击的总数 - 这通常不是几个帖子。任何方式?
答案 0 :(得分:0)
我从来没有找到一个查询元数据的解决方案,并且每个帖子都得到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);
答案 1 :(得分:0)
您可以使用以下方法来提高此速度:
$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_前缀。