Php 为所有作者添加自定义字段值';s职位
我试图为每个作者的所有文章添加一个自定义字段值,并将其显示在作者的个人资料页面上 我创建了一个Like按钮函数,当用户喜欢一篇文章时,它会将+1添加到post自定义字段Php 为所有作者添加自定义字段值';s职位,php,wordpress,custom-fields,Php,Wordpress,Custom Fields,我试图为每个作者的所有文章添加一个自定义字段值,并将其显示在作者的个人资料页面上 我创建了一个Like按钮函数,当用户喜欢一篇文章时,它会将+1添加到post自定义字段\u post\u Like\u count,因此如果一篇文章有10个Like,那么\u post\u Like\u count中的值就是10 我想做的是把每个作者的所有帖子加起来,他们所有帖子的总喜欢度加起来,所以如果他们有5个帖子,每个帖子都有10个喜欢度,那么总价值应该是50 $author_posts = get_post
\u post\u Like\u count
,因此如果一篇文章有10个Like,那么\u post\u Like\u count
中的值就是10
我想做的是把每个作者的所有帖子加起来,他们所有帖子的总喜欢度加起来,所以如果他们有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的底线中计算它,它应该是作者帖子的所有喜欢的总数 您的get_posts()
函数只提取该作者最近发表的10篇文章(或您设置为每页默认文章的任何数量)。添加'nopaging'=>true
以获取作者的所有帖子
此外,如果在循环中执行此操作,则在foreach循环中使用$post
可能会有问题。尝试将其切换到类似于$author\u post
的位置,然后使用:
$likes = absint( get_post_meta( $author_post->ID, '_post_like_count', true ) );
您的问题可以通过将
posts\u per\u page
设置为-1
来解决,但我会尝试运行自定义数据库查询。这样做的好处是您只运行一个SQL查询
通过使用get\u posts
每次调用get\u post\u 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.
顺便说一下,这是即时编码的,所以我不能保证它完全准确。我很想知道结果。谢谢,今晚晚些时候我会测试一下,让你知道它是如何工作的。