我有一个插件可以从wpdb获取用户信息。在对安全Wordpress 4.8.2进行了小规模更新后,插件运行不好。我的sellect按钮无法运行并将数据打开到表中。
add_action(\'wp_ajax_get_batch_course_stats\',array($this,\'get_batch_course_stats\'));
如果我把这行放在类外,它会运行,但无法获取数据,因为我的查询在类内。
这是我的密码。
<?php
if ( ! defined( \'ABSPATH\' ) ) {
exit;
}
if ( ! defined( \'WPLMS_BATCH_STATISITCS_SLUG\' ) )
define( \'WPLMS_BATCH_STATISITCS_SLUG\', \'stats\' );
if ( class_exists( \'BP_Group_Extension\' ) ) :
class BP_Group_Course_Batch_Statistics extends BP_Group_Extension {
var $message;
function __construct() {
$args = array(
\'slug\' => WPLMS_BATCH_STATISITCS_SLUG,
\'name\' => __( \'Statistics\', \'wplms-batches\' ),
\'visibility\' => \'private\',
\'nav_item_position\' => 10,
\'enable_nav_item\' => false,
\'screens\' => array(
\'admin\' => array(
\'metabox_context\' => \'side\',
\'metabox_priority\' => \'core\'
),
\'create\' => array(
\'enabled\' => false,
),
\'edit\' => array(
\'enabled\' => false,
),
)
);
$group_id = bp_get_group_id();
global $wpdb, $bp;
if(isset($bp->groups) && is_object($bp->groups->current_group)){
$enable = groups_get_groupmeta($bp->groups->current_group->id, \'course_batch\' );
}else{
$enable = 0;
}
if(!empty($enable)){
$args[\'enable_nav_item\'] = true;
}
$flag = 1;
if(isset($bp->groups) && is_object($bp->groups->current_group)){
$batch_stats_visibility = groups_get_groupmeta($bp->groups->current_group->id,\'batch_stats_visibility\');
}
if(!empty($batch_stats_visibility)){
$user_id = get_current_user_ID();
if($batch_stats_visibility == \'mods\'){
if(!groups_is_user_mod($user_id,$bp->groups->current_group->id)){
$flag = 0;
}
}else if($batch_stats_visibility == \'admins\'){
if(!groups_is_user_admin($user_id,$bp->groups->current_group->id)){
$flag = 0;
}
}
}
if($flag){
parent::init( $args );
add_action(\'wplms_batch_statistics\',array($this,\'batch_statistics\'),10,1);
add_action(\'wplms_batch_moderator_statistics\',array($this,\'moderator_statistics\'),10,1);
add_action(\'wp_ajax_get_batch_course_stats\', array($this,\'get_batch_course_stats\'));
add_action(\'bp_enqueue_scripts\', array( $this, \'cssjs\' ) );
}
}
function cssjs(){
if( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action(WPLMS_BATCH_STATISITCS_SLUG) ){
wp_enqueue_script(\'datatables-js\',plugins_url( \'/assets/js/jquery.dataTables.min.js\', __FILE__ ),array(\'jquery\'));
wp_enqueue_script(\'bootstrap-datatables-js\',plugins_url( \'/assets/js/dataTables.bootstrap.min.js\', __FILE__ ));
}
}
/**
* display() contains the markup that will be displayed on the main
* plugin tab
*/
function display( $group_id = NULL ) {
if(empty($group_id))
$group_id = bp_get_group_id();
do_action(\'wplms_batch_statistics\',$group_id);
if(bp_current_user_can( \'bp_moderate\' )){
do_action(\'wplms_batch_moderator_statistics\',$group_id);
}else{
do_action(\'wplms_batch_student_statistics\',$group_id);
}
$leaderboard = groups_get_groupmeta($group_id,\'batch_leaderboard\');
if(bp_current_user_can( \'bp_moderate\' ) || !empty($leaderboard)){
//echo \'<h3 class="heading"><span>\'._x(\'Leaderboard\',\'Batch Leaderboard\',\'wplms-batches\').\'</span></h3>\';
$members = BP_Groups_Member::get_group_member_ids($group_id);
$courses = groups_get_groupmeta($group_id,\'batch_course\',false);
if(empty($courses)){
echo \'<div class="message">\'.__(\'No Courses connected to Batch\',\'wplms-batches\').\'</div>\';
return;
}
$member_ids = implode(\',\',$members);
$course_ids = implode(\',\',$courses);
$course_status_string = \'\';
foreach($courses as $c){
$course_status_string .= "\'course_status".$c."\',";
}
$course_status_string =trim($course_status_string, ",");
global $wpdb,$bp;
$results = $wpdb->get_results($wpdb->prepare("SELECT p.meta_key as uid,sum(p.meta_value) as sum
FROM {$wpdb->postmeta} as p
LEFT JOIN {$wpdb->usermeta} as u
ON p.meta_key = u.user_id
WHERE p.meta_key IN ($member_ids)
AND p.post_id IN ($course_ids)
AND u.meta_key IN ($course_status_string)
AND u.meta_value > %d
GROUP BY uid ORDER BY sum DESC",3));
?>
<?php
}
}
function batch_statistics($group_id){
$courses = groups_get_groupmeta($group_id,\'batch_course\',false);
if(empty($courses)){
echo \'<div class="message">\'.__(\'No Courses connected to Batch\',\'wplms-batches\').\'</div>\';
return;
}
$members = BP_Groups_Member::get_group_member_ids($group_id);
$admins = groups_get_group_admins( $group_id );
$mods = groups_get_group_mods( $group_id );
global $wpdb,$bp;
$batch_average = $batch_badge_count = $batch_certificate_count = 0;
$batch_average = groups_get_groupmeta($group_id,\'batch_average\');
$batch_badge_count = groups_get_groupmeta($group_id,\'batch_badge_count\');
$batch_certificate_count = groups_get_groupmeta($group_id,\'batch_certificate_count\');
global $wpdb, $bp;
if(isset($_GET[\'recalculate\'])){
$batch_badge_count = $batch_certificate_count = 0;
$total_marks = 0;$total_denom = 1;
foreach($members as $member_id){
foreach($courses as $course_id){
$status = bp_course_get_user_course_status($member_id,$course_id);
if($status > 3){
$marks = get_post_meta($course_id,$member_id,true);
$total_marks += $marks;
$total_denom++;
}
}
$certificates = get_user_meta($member_id,\'certificates\',true);
$badges = get_user_meta($member_id,\'badges\',true);
if(!empty($certificates)){
foreach($certificates as $certificate_course_id){
if(in_array($certificate_course_id,$courses)){
$batch_certificate_count++;
}
}
}
if(!empty($badges)){
foreach($badges as $badges_course_id){
if(in_array($badges_course_id,$courses)){
$batch_badge_count++;
}
}
}
}
if($total_denom > 1){
$total_denom--;
}
$batch_average = round($total_marks/$total_denom,2);
groups_update_groupmeta($group_id,\'batch_average\',$batch_average);
groups_update_groupmeta($group_id,\'batch_badge_count\',$batch_badge_count);
groups_update_groupmeta($group_id,\'batch_certificate_count\',$batch_certificate_count);
}
?>
<?php /*
?>
<div class="row">
<div class="col-md-12">
<div class="course_stats_form">
<h3 class="heading"><span><?php _e(\'Course Specific Statistics\',\'wplms-batches\'); ?></span></h3>
<select id="batch_course">
<?php
foreach($courses as $course){
echo \'<option value="\'.$course.\'">\'.get_the_title($course).\'</option>\';
}
?>
</select>
<?php wp_nonce_field(\'batch_course_security\'.$group_id,\'batch_course_security\');
echo \'<input type="hidden" id="course_batch_id" value="\'.$group_id.\'" />\'; ?>
<a id="get_batch_course_stats" class="button">
<?php _e(\'Get Stats\',\'wplms-batches\'); ?>
</a>
</div>
</div>
<?php
}
function moderator_statistics($group_id){
global $wpdb, $bp;
$courses = groups_get_groupmeta($group_id,\'batch_course\',false);
if(empty($courses)){
echo \'<div class="message">\'.__(\'No Courses connected to Batch\',\'wplms-batches\').\'</div>\';
return;
}
?>
<?php
$members = BP_Groups_Member::get_group_member_ids($group_id);
}
function get_batch_course_stats(){
$course_id = $_POST[\'course_id\'];
$batch_id = $_POST[\'batch_id\'];
$user_id = get_current_user_ID();
global $wpdb, $bp;
if ( !isset($_POST[\'security\']) || !wp_verify_nonce($_POST[\'security\'],\'batch_course_security\'.$batch_id) || !is_numeric($course_id) || !is_numeric($batch_id)){
_e(\'Security check Failed. Contact Administrator.\',\'wplms-batches\');
die();
}
echo \'<h5>\'.sprintf(__(\'Statistics for Course %s\',\'wplms-batches\'),\'<a href="\'.get_permalink($course_id).\'" target="_blank">\'.get_the_title($course_id)).\'</a></h5>\';
if(function_exists(\'bp_course_get_curriculum_quizes\')){
global $wpdb, $bp;
$quiz_ids = bp_course_get_curriculum_quizes($course_id);
// Sort Quiz id
sort($quiz_ids);
$tlength = count($quiz_ids);
for($x = 0; $x < $tlength; $x++);
/*
$flag = 0;
if(!empty($quiz_ids)){
$flag++;
}
*/
?>
<table class="course_leaderboard table table-hover table-bordered" id="table_course">
<thead>
<tr>
<th>#</th>
<th valign="top">
<?php _e(\'Student\',\'wplms-batches\') ?> <br>
</th>
<th>
Progression (%)
</th>
<th>
QCM terminés
</th>
<th>
Sessions terminées
</th>
<?php
//if($flag >= 1){
foreach($quiz_ids as $quiz_id){
echo \'<th><a href="\'.get_permalink($quiz_id).\'" target="_blank">\'.get_the_title($quiz_id).\'</a></th>\';
}
//}
?>
</tr>
</thead>
<tbody>
<?php
$members = BP_Groups_Member::get_group_member_ids($batch_id);
$i=1;
foreach($members as $member_id){
foreach ($courses as $course_id)
global $wpdb, $bp;
$progress = bp_course_get_user_progress($member_id,$course_id);
/*
* Process for QCM Value
*/
global $wpdb, $bp;
$marks=$wpdb->get_results(sprintf("
SELECT rel.post_id as id, rel.meta_value as val
FROM {$wpdb->posts} AS posts
LEFT JOIN {$wpdb->postmeta} AS rel ON posts.ID = rel.post_id
WHERE posts.post_type = \'quiz\'
AND posts.post_title LIKE \'%%QCM\'
AND posts.post_status = \'publish\'
AND rel.meta_key = %d
AND rel.meta_value >= 0
", $member_id)
);
if (is_array($marks)) {
foreach ($marks as $k=>$mark) {
$user_marks[] = $mark->val;
}
}
else {
$user_marks = array();
}
if (is_array($marks))
$value = count($marks);
if ( $title )
$label = $title;
else
$label = __(\'Quizzes Completed\', \'wplms-dashboard\');
if (is_array($user_marks)) {
foreach ($user_marks as $i=>$mark){
if ($i<11) {
if (!$i)
$marks_string = $mark;
else
$marks_string .= \',\'.$mark;
}
}
}
if (!is_numeric($value))
$value = 0;
/*
* Process for Personality Value
*/
global $wpdb;
$marks=$wpdb->get_results(sprintf("
SELECT rel.post_id as id, rel.meta_value as val
FROM {$wpdb->posts} AS posts
LEFT JOIN {$wpdb->postmeta} AS rel ON posts.ID = rel.post_id
WHERE posts.post_type = \'quiz\'
AND posts.post_title LIKE \'%%Test de Personnalité\'
AND posts.post_status = \'publish\'
AND rel.meta_key = %d
AND rel.meta_value >= 0
", $member_id)
);
if (is_array($marks)) {
foreach ($marks as $k=>$mark) {
$user_marks[] = $mark->val;
}
}
else {
$user_marks = array();
}
if ( $title )
$label2 = $title;
else
$label2 = __(\'Personality Tests Completed\', \'wplms-dashboard\');
if (is_array($marks))
$value2 = count($marks);
if (is_array($user_marks)) {
foreach ($user_marks as $i=>$mark){
if ($i<11) {
if (!$i)
$marks_string = $mark;
else
$marks_string .= \',\'.$mark;
}
}
}
if (!is_numeric($value2))
$value2 = 0;
?>
<tr>
<td>
<?php echo $i ?>
</td>
<td>
<?php echo bp_core_get_user_displayname($member_id) ?>
</td>
<td>
<?php echo $progress ?> %
</td>
<td>
<?php echo $value ?>
</td>
<td>
<?php echo $value2 ?>
</td>
<?php
//if($flag >= 1){
foreach($quiz_ids as $quiz_id){
echo \'<td>\'.get_post_meta($quiz_id,$member_id,true).\'</td>\';
}
//}
$sum=0;
$status = bp_course_get_user_course_status($member_id,$course_id);
if($status > 3){
$marks = get_post_meta($course_id,$member_id, true);
$sum += $marks;
echo \'<td>\'.$marks.\'</td>\';
}else{
echo \'<td>\'._x(\'N.A\',\'Marks not available in batch statisitcs leaderboard\',\'wplms-batches\').\'</td>\';
}
echo \'</tr>\';
$i++;
}
?>
</tr>
<?php }?>
</tbody>
</table>
<!-- END Custom Code KVDC -->
<?php
die();
}
} // END of Class
add_action( \'bp_init\',\'wplms_batch_statistics_register_group_extension\');
function wplms_batch_statistics_register_group_extension(){
bp_register_group_extension( \'BP_Group_Course_Batch_Statistics\' );
}
endif;
我用buddypress。我的wp\\u enqueue\\u脚本it端必须放在wp\\u enqueue\\u脚本和login\\u enqueue\\u脚本之后。
在Wordpress更新之前,我的所有功能都运行良好!!
UPDATE
此处为附加代码