看看这个,我看到“Paid”,一个字符串,不在引号中。这会导致错误。您可以添加$wpdb->show_errors()
and $wpdb->print_error()
methods 以及任何其他mysql问题。
在查询数据库时,还应使用$wpdb->prepare()
方法来转义和准备用于查询的变量(是$user->ID
可能无法妥协,但该查询中的未来值可能会被替换,或者该值是否在将来更改为$_REQUEST
-- 逃避总是好的)。
我还使用$wpdb->get_var()
而不是$wpdb->get_results()
因为它给了你一个你所追求的单一价值,它会把事情清理干净一点。和使用$wpdb->prefix
而不是wp_
如果发布此插件/主题,则使插件与其他安装更兼容。
add_filter(\'gform_field_value_user_retainer\', \'gform_populate_user_retainer\');
function gform_populate_user_retainer($value){
global $wpdb;
$user = wp_get_current_user();
// turn on errors
$wpdb->show_errors();
// make the query
$result = $wpdb->get_var( $wpdb->prepare(
"
SELECT SUM(`payment_amount`) as `dviews`
FROM `{$wpdb->prefix}gf_entry`
WHERE `created_by` = %d
AND `form_id` = 37
AND `payment_status` = \'Paid\'
",
$user->ID
) );
// if there was a query error
if ( $wpdb->last_error !== \'\' ) {
return " Error: " . $wpdb->print_error();
}
return $result;
}
如果这不能完全解决您的问题:
如果你回来了"hello world"
或123
在里面gform_populate_user_retainer()
, 值是否显示在您期望的位置?如果没有,就是gform_field_value_user_retainer
正确的挂钩?
如果你echo "<pre>".$wpdb->prepare("..."); die();
使用字符串查询而不是运行它,并将其粘贴到MySQL中,是否有效?如果它没有遵循MySQL错误来解决。
如果你echo "<pre>"; print_r($result);die();
这个$result
你看到了你期望返回的内容,而不是返回它吗?如果没有,请修改查询。
如果你echo "<pre>"; print_r($user);die();
你看到你期望的了吗?为您自己和其他用户?无用户?