【问题标题】:Counting post meta based on key and value and get meta count, not post count根据键和值计算帖子元并获取元计数,而不是帖子计数
【发布时间】:2017-05-22 10:14:34
【问题描述】:

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

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

编辑:我很确定问题在于我得到的是帖子总数,而不是元数据条目/点击的总数 - 通常不是每个邮政。有什么办法吗?

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    我从未找到查询元数据并在每个帖子中获取 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);
    

    【讨论】:

      【解决方案2】:

      您可以通过以下方式提高速度:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 2016-08-18
        • 2011-05-29
        • 2022-11-22
        • 2019-11-30
        • 1970-01-01
        • 2020-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多