我尝试为每个作者的帖子添加自定义字段值,并将其显示在作者的个人资料页面上。
我有一个我创建的赞按钮功能,当用户喜欢帖子时,它会添加+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的底线中计算它,这应该是作者的帖子组合的所有喜欢的数量。
答案 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.
这是顺便编码的,所以我不能保证它完全准确。我很想知道结果。