根据键和值计算post meta并获取元数,而不是发布计数

时间:2017-01-07 20:30:27

标签: wordpress

我正在使用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);
}

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

编辑:我很确定问题是我收到了帖子的总数,而不是元数据条目/点击的总数 - 这通常不是几个帖子。任何方式?

2 个答案:

答案 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_前缀。