如何判断用户的元值是增加了还是减少了

时间:2012-07-02 作者:Pollux Khafra

我为我的用户存储了一个自定义的用户元值,它被存储为一个像分数一样的数字。我需要一种方法来判断它是从上一个值减少了还是增加了。所以当我显示它时,我可以显示一个箭头来显示它的趋势。有什么想法吗?

下面是我如何获得分数并更新用户元的方法。

add_filter(\'the_content\',\'update_user_score\');
function update_user_score($content){
    global $post;
    $author_id = $post->post_author;
    $author_posts = get_posts( array(
    \'author\' => $author_id,
    \'posts_per_page\' => -1
  ) );
    $counter = 0;
    foreach ( $author_posts as $author_post )
  {
    $score = get_post_meta( $author_post->ID, \'ratings_score\', true );
    $counter += $score;
  }
    update_user_meta( $author_post->post_author, \'score\', $counter);
    return $content;
}

2 个回复
最合适的回答,由SO网友:brasofilo 整理而成

我将通过创建两个额外的自定义字段来解决这个问题:

  • _score_last
  • _score_variation
第一条下划线使CF在管理区域中不可见。

在主题中删除以下代码functions.php:

if( is_admin() )
{
    add_action( \'save_post\', \'wpse_57217_check_customfield_variation\', 11, 2 );
}

function wpse_57217_check_customfield_variation( $post_id, $post )
{
    if ( 
        ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
        or ! current_user_can( \'edit_post\', $post_id )
        or wp_is_post_revision( $post )
    )
    { // Noting to do.
        return;
    }

    $actual = get_post_meta($post_id, \'score\', true);
    $last = get_post_meta($post_id, \'_score_last\', true);
    $last = ( \'\' != $last ) ? $last : \'0\';
    if ( \'\' != $actual ) 
    {
        if ( absint($actual) > absint($last) )
        {
            update_post_meta( $post_id, \'_score_variation\', \'up\' );
        }
        elseif ( absint($actual) == absint($last) )
        {
            update_post_meta( $post_id, \'_score_variation\', \'stable\' );
        }
        else
        {
            update_post_meta( $post_id, \'_score_variation\', \'down\' );
        }
        update_post_meta( $post_id, \'_score_last\', $actual );
    } 
}
仅供参考,循环内部:

echo \'actual score: \' . get_post_meta($post->ID, \'score\', true);
echo \'<br> last score (value already updated): \' . get_post_meta($post->ID, \'_score_last\', true);
echo \'<br> score variation: \' . get_post_meta($post->ID, \'_score_variation\', true);

SO网友:SickHippie

简单-您需要两个单独的元值,一个用于当前分数,一个用于最后一个分数或分数趋势。存储了一个值后,WordPress只能知道该值,无法判断它是第一次设置还是第一百万次设置。

结束

相关推荐