我首先将自己置于优秀人员的怜悯之下,作为php和stackoverflow的完整新手。我已经在这里和其他地方搜索过这个答案,而且我在拼凑它们时遇到了麻烦。
这是我的问题 - 我已经设置了一个表单(使用重力表单),登录的用户可以登录"飞行时间"每次飞行后。我使用重力表单将此数据发布到名为" my-flight-record"的自定义帖子中。我已经从表单中映射了所有字段。现在,我只是想向用户显示一个字段的运行总计,wpcf-total-flight-time,但我只想向用户显示他们自己的总时间。
这是我目前正在使用的代码,但它会对所有条目进行求和。我只想总结当前用户的条目(谁也应该在他们甚至可以看到此页面之前登录)。
<?php
//get current user
global $current_user;
get_currentuserinfo();
$userPosts = get_posts(array('author' => $current_user->ID, 'post_type'=> 'my-flight-record'));
// loop to create array of ids by user
foreach ($userPosts as $post) {
setup_postdata($post);
$ids[] = get_the_ID();
}
$idList = implode(",", $ids);
$meta_key = 'wpcf-total-flight-time';//set this to your custom field meta key
$allflighthours = $wpdb->get_col($wpdb->prepare("
SELECT meta_value
FROM $wpdb->postmeta
WHERE meta_key = %s
AND post_id in (" . $idList . ")", $meta_key));
echo 'My total flight hours logged = ' . array_sum( $allflighthours) . ''; ?>
此代码会产生一个总数,但对于每个人而言,不仅仅是登录用户。此外,&#39; $ idList = implode(&#34;,&#34;,$ ids);&#39;行导致我的错误。
请帮帮我自己!我确定我遗漏了重要信息 - 让我知道我错过了什么!
答案 0 :(得分:0)
首先,您需要检查用户是否已登录 wordpress文档中的一些例子
if(!is_user_logged_in()) {
//no user logged in
}
http://codex.wordpress.org/Function_Reference/get_currentuserinfo#Parameters
//get current user
global $current_user;
if(is_user_logged_in()) {
get_currentuserinfo();
$userPosts = get_posts(array('author' => $current_user->ID, 'post_type'=> 'my-flight-record'));
// loop to create array of ids by user
foreach ($userPosts as $post) {
setup_postdata($post);
$ids[] = get_the_ID();
}
$idList = implode(",", $ids);
$meta_key = 'wpcf-total-flight-time';//set this to your custom field meta key
$allflighthours = $wpdb->get_col($wpdb->prepare("
SELECT meta_value
FROM $wpdb->postmeta
WHERE meta_key = %s
AND post_id in (" . $idList . ")", $meta_key));
echo 'My total flight hours logged = ' . array_sum( $allflighthours) . '';
}
答案 1 :(得分:0)
为什么需要两个单独的数据库查询?试试这个:
<?php
//get current user
global $current_user;
get_currentuserinfo();
$userPosts = get_posts(array('author' => $current_user->ID,
'post_type'=> 'my-flight-record'));
//initialize an empty array
$flight_hours = array();
// loop to create array of ids by user
foreach ($userPosts as $post) {
setup_postdata($post);
$flight_hours[] = get_post_meta(get_the_ID(), 'wpcf-total-flight-time', true);
}
printf('My total flight hours logged = %s ', array_sum( $flight_hours) ); ?>
正如ipauler在他的回答中所说,你应该实施一些错误检查,以确保有一个登录用户,并且wpcf-total-flight-time
数据都存在且有效。