Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为所有作者添加自定义字段值';s职位_Php_Wordpress_Custom Fields - Fatal编程技术网

Php 为所有作者添加自定义字段值';s职位

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

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

我创建了一个Like按钮函数,当用户喜欢一篇文章时,它会将+1添加到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.

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

谢谢,今晚晚些时候我会测试一下,让你知道它是如何工作的。