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

时间:2015-05-21 23:13:16

标签: php wordpress custom-fields

我尝试为每个作者的帖子添加自定义字段值,并将其显示在作者的个人资料页面上。

我有一个我创建的赞按钮功能,当用户喜欢帖子时,它会添加+1以发布自定义字段_post_like_count,因此,如果帖子有10个赞,则_post_like_count中的值为10. / p>

我要做的是将每个作者的所有帖子加在一起,以便他们对所有帖子的总数相加,这样如果他们有5个帖子,每个帖子每个都有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个帖子,有17个喜欢,那么它将正确显示。

关于我在顶线尝试做的事情,我获得了帖子作者的ID,然后我运行foreach来获取每个帖子并存储元字段值在$ likes变量中,然后在$ total_like_count的底线中计算它,这应该是作者的帖子组合的所有喜欢的数量。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

通过将posts_per_page设置为-1可以解决您的问题,但我很想尝试运行自定义数据库查询。这样做的好处是你只运行一个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.

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