仅为当前用户求和自定义字段 - Wordpress

Posted

技术标签:

【中文标题】仅为当前用户求和自定义字段 - Wordpress【英文标题】:Sum Custom Field For Current User Only - Wordpress 【发布时间】:2014-12-23 20:01:14 【问题描述】:

我要做的是在 Wordpress 中为当前登录的用户查询和汇总一个自定义字段。

我的写作公司有一个网站,作家可以登录并申请他们想做的工作。对于每个作业,都有一个名为“字数”的字段,我在其中输入需要完成的文章的字数。为了计算每个作者的作业欠款,我使用字数字段(带有元键“assignment_word_count”)并将其乘以每个作者按字数支付的统一费率。

到目前为止,我整理的最接近我想要它做的脚本是一个 SQL 脚本。不幸的是,它汇总了所有字数字段,而不仅仅是属于当前用户的字段。如果我尝试在代码中添加任何内容以将其限制为当前用户,则总数将降至零。

<?php
$now = current_time('mysql');
                $sql = "SELECT ";
                $sql .= "meta_value FROM $wpdb->posts AS posts, $wpdb->postmeta AS postmeta ";
                $sql .= "WHERE posts.ID = postmeta.post_id AND postmeta.meta_key =     'assignment_word_count' ";
                $sql .= "AND posts.post_status = 'paid' ";
                $sql .= "AND posts.post_date < '$now' ";
                $sql .= "AND postmeta.meta_value != '' ";
                $results = array(); $values = array();
                $results = $wpdb->get_results($sql);
                $totalpay = 0;
                if (!empty($results))
                    foreach ($results as $result) 
                        $totalpay += $result->meta_value;
                    
                
                echo  'Total Paid: $' . $totalpay * money_format('0.0040=(#10.2n', $number);
?>

我还发现另一个脚本应该完全符合我的要求,但它告诉我 implode 行是一个无效参数。

    <?php
        //get current user
        global $current_user;
        get_currentuserinfo();
        // build query of ids by user
        $userPosts = get_posts(array('author' => $current_user->ID, 'post_type'=> 'assignments')); //change this

        // loop to create array of ids by user
        foreach ($userPosts as $post) 
            setup_postdata($post);
            $ids[] = get_the_ID();
        
        $idList = implode(",", $ids); //tun this crap into a list

        $meta_key = 'assignment_word_count';//set this to your custom field meta key
        $totalpay = $wpdb->get_col($wpdb->prepare("
                                          SELECT meta_value
                                          FROM $wpdb->postmeta
                                          WHERE meta_key = %s
                                          AND post_id in (" . $idList . ")", $meta_key));
        echo 'Total pay: $ ' . array_sum( $totalpay);   ?>

【问题讨论】:

格式正确的问题和内容以及关于您正在做什么以及预期结果的简明陈述。我们只是不知道哪个字段包含您要限制的用户 ID。 您的查询没有提到作者。你需要像$sql .= "AND author = '$current_user' "; 这样的东西。正如@xQbert 所说,我们不知道您的列或变量名称,因此您必须适应它。 目前没有对作者的引用,因为我无法让它正常工作。用户 ID 应该是当前用户。当我在其中添加 $sql .= "And author = '$current_user'" 时,它会使所有其他查询结果消失并且根本不显示任何总数,甚至不显示 "Total Paid: $" 部分回声。 【参考方案1】:

http://codex.wordpress.org/Function_Reference/wp_get_current_user使用该函数获取当前用户id

然后

if(currentuserid=="meabox_user")


display the metaboxes

.........

【讨论】:

【参考方案2】:

您应该首先尝试使用硬编码的用户 ID 修复您的查询,然后再尝试如何传递当前用户。

在查询中,正确的字段名称是post_author,而不是作者。

【讨论】:

以上是关于仅为当前用户求和自定义字段 - Wordpress的主要内容,如果未能解决你的问题,请参考以下文章

在 wordpress (ACF) 中显示用户自定义字段

关于自定义字段流行度的 WordPress 订单查询帖子

根据 Wordpress 中的自定义字段值批量重写帖子 slug

通过自定义日期字段的 Wordpress 自定义存档页面链接

Wordpress ACF:如何通过自定义代码(PHP)将行添加到附加到用户的转发器字段

Wordpress:使用 wp_insert_post() 填充自定义帖子类型字段