为作者的所有帖子添加自定义字段值

Add a custom field value for all of an Author's posts

我正在尝试为每位作者的所有 post 添加一个自定义字段值,并将其显示在作者的个人资料页面上。

我创建了一个“赞”按钮功能,当用户喜欢 post 时,它会将 +1 添加到 post 自定义字段 _post_like_count 所以如果 post 10个赞_post_like_count中的值为10。

我要做的是将每个作者的所有 post 加起来,他们所有 post 的总点赞数加起来,如果他们有 5 posts,每个有10个赞,每个总值应该是50。

$author_posts = get_posts( array('author' => $author->ID) ); // Author's ID
$total_like_count = 0; // needed to collect the total sum of likes
foreach ( $author_posts as $post ) {
    $likes = absint( get_post_meta( $post->ID, '_post_like_count', true ) );
$total_like_count += $likes;
}

这是我正在使用的 php,我认为它应该有效,它对某些作者有效,但对其他作者无效,因为我有一些作者应该有 1000 多个赞,而且它显示 77,如果作者只有 1 post 和 17 个赞,它会正确显示。

关于我在顶行尝试做的一些事情,我得到了 post 作者的 ID,然后我 运行 foreach 得到每个 post并将元字段值存储在 $likes 变量中,然后在 $total_like_count 的底行向上计算它,这应该是作者 post 的所有喜欢的总和。

您的 get_posts() 函数仅提取该作者的 10 篇最新帖子(或您设置为每页默认帖子的任何数量)。添加 'nopaging' => true 以获取作者的所有帖子。

此外,如果您在循环内执行此操作,则在 foreach 循环中使用 $post 可能会出现问题。尝试将其切换为 $author_post 之类的内容,然后使用:

$likes = absint( get_post_meta( $author_post->ID, '_post_like_count', true ) );

您的问题可以通过将 posts_per_page 设置为 -1 来解决,但我很想 运行 自定义数据库查询。这样做的好处是您只需 运行ning 一个 SQL 查询。

通过使用 get_posts,您每次调用 get_post_meta 时都会 运行 进行 SQL 查询,这是非常低效的。如果一个作者有 10 篇文章,您可能不会注意到它,但是一旦您发表了数百篇文章,影响就会很明显。

示例:

function wpse_get_author_like_count( $author_id ) {

    global $wpdb;

    $like_count = $wpdb->get_var( $wpdb->prepare( "
        SELECT SUM( mt.meta_value ) 
        FROM {$wpdb->postmeta} AS mt
        LEFT JOIN {$wpdb->posts} p ON p.ID = mt.post_id
        WHERE mt.meta_key = '_post_like_count'
        AND p.post_type = 'post',
        AND p.post_status = 'publish'
        AND p.post_author = %d
    ", $author_id ) );

    return (int) $like_count;

}

然后要使用它你会写:

$author_like_count = wpse_get_author_like_count( 10 ); // replacing this with the correct author ID of course.

顺便说一句,这是即时编码的,所以我不能保证它完全准确。我很想知道结果。