短代码冲突。 如何让每个组独立加载?

Maybe I'm not asking the right question but I must be missing something simple. My short codes display fine if I place one sport grouping, lets say 'NFL', on a page but as soon as I add a second sport group, lets say 'baseball', the generated tables that display the 3 types of data ($data_type=="current", $data_type=="past", $data_type=="detailed") in the php file memberresults function I provided below, for that sport group do not display. Furthermore the data that does generate for the first group of short code, in this case 'NFL', is randomly selected from any one of the groups/sports.

How can I get all of these short codes to display and load the 3 data types per sport all on one page without them conflicting with one another? To see what is happening on the page itself you can go here after you login: https://wsplays-members.com/short-code-test/ Login with this temp Username "test" Password "password". For reference I will display my code below. Thank you in advance.

Short code entered in wordpress page

[get_biddata type='current' sport='NFL Football']
[get_biddata type='past' sport='NFL Football']
[get_biddata type='detailed' sport='NFL Football']

[get_biddata type='current' sport='NCAA Football']
[get_biddata type='past' sport='NCAA Football']
[get_biddata type='detailed' sport='NCAA Football']

[get_biddata type='current' sport='CFL Football']
[get_biddata type='past' sport='CFL Football']
[get_biddata type='detailed' sport='CFL Football']

[get_biddata type='current' sport='NBA Basketball']
[get_biddata type='past' sport='NBA Basketball']
[get_biddata type='detailed' sport='NBA Basketball']

[get_biddata type='current' sport='NCAA Basketball']
[get_biddata type='past' sport='NCAA Basketball']
[get_biddata type='detailed' sport='NCAA Basketball']

[get_biddata type='current' sport='MLB Baseball']
[get_biddata type='past' sport='MLB Baseball']
[get_biddata type='detailed' sport='MLB Baseball']

php file memberresults function

<?php
function memberresults($sport_val,$data_type){
global $wpdb;
  $bidsys_options = get_option('bidsys_options');
   for($i=1;$i<11;$i++){
        if($bidsys_options->sportsstatus[$i]!="Disabled"){
             if($sport_val==$bidsys_options->sportsname[$i])
             $sport = $i;
   }}
  $user = get_current_user_id();
  $currentsportaccess =   get_user_meta($user,"sport_".$sport ,true);
    if($currentsportaccess=="No"){
        ?>
        <div class="pmpro_content_message">Your access plan is valid but does not give you access to view this section.<br /> You may <a href="<?=home_url();?>/purchase/">purchase another access plan here</a>.</div>
        <?php

    } else {


    if($data_type=="current"){
      if (pmpro_hasMembershipLevel() ) {
   ?>
   <script type='text/javascript'>
jQuery(document).ready(function(){
    memberresults("current","<?php echo $sport;?>","");
});
</script>
<h1 class="post-title"><?php echo $sport_val; ?> Picks</h1>
<h2 class="post-title">Current Season</h2>
<table class='inner_result'>
<td colspan='5' >
<table id='member_<?=$data_type;?>season_vals_inner' class='hdr_3 inner_result'>
</table>
</td>
</table>
   <?php
        } else {

            ?>
        <h1 class="post-title"><?php echo $sport_val; ?> Picks</h1>
        <h2 class="post-title">Current Season Record</h2>
        <div class="pmpro_content_message">You must be logged in to view this section.  Please <a href="<?=home_url();?>/login/">log in</a> or <a href="<?=home_url();?>/register/">register here</a>.</div>
        <?php

        }
    } else  if($data_type=="past"){
     if (pmpro_hasMembershipLevel() ) {

    $result = "SELECT * FROM ".$wpdb->prefix."bidsys_sport_seasons WHERE sport=  '".$sport."' AND current_season = 'NO'   ORDER BY start_date DESC";
     $newmeta = $wpdb->get_results($result);
    ?>
<script type='text/javascript'>
jQuery(document).ready(function(){
    memberresults("past","<?php echo $sport;?>","season_<?php echo $newmeta[0]->id;?>");
});
</script>
<h1 class="post-title"><?php echo $sport_val; ?> Picks</h1>
<h2 class="post-title">Previous Seasons</h2>
    <form action='' method='post' class="f_p_filter_frm outside_table">
    <select  name='f_p_filter' class="f_p_filter" onchange='memberresults("past","<?php echo $sport; ?>",this.value)' >
    <?php $i = 0; foreach($newmeta as $seasons ){
        if($i == 0){  $sel =  'selected=""'; } else { $sel = ""; }
        ?>
    <option value='season_<?php echo $seasons->id;?>' <?php echo $sel;?>><?php echo $seasons->season_name;?></option>
    <?php $i++; } ?>
    </select>
    </form>

<table class='inner_result'>
<td colspan='5' >
<table id='member_<?=$data_type;?>season_vals_inner' class='hdr_3'>
</table>
</td>
</table>
   <?php
        } else {

            ?>
        <h1 class="post-title"><?php echo $sport_val; ?> Picks</h1>
        <h2 class="post-title">Previous Seasons Records</h2>
        <div class="pmpro_content_message">You must be logged in to view this section.  Please <a href="<?=home_url();?>/login/">log in</a> or <a href="<?=home_url();?>/register/">register here</a>.</div>
        <?php

        }

    } else  if($data_type=="detailed"){
     if (pmpro_hasMembershipLevel() ) {
   ?>
   <script type='text/javascript'>
jQuery(document).ready(function(){
    memberresults("detailed","<?php echo $sport;?>","yesterday");
});
</script>
<style>
.imgwin {
    background: url('/wp-content/plugins/bid-sys/customgif/winningPick.gif');
     height: 16px; width: 16px; margin:8px;
}
.imgloss {
    background: url('/wp-content/plugins/bid-sys/customgif/losingPick.gif');
     height: 16px;  width: 16px;  margin:8px;
}
.imgpush {
    background: url('/wp-content/plugins/bid-sys/customgif/pushedPick.gif');
     height: 16px;  width: 16px; margin:8px;
}

</style>
<h1 class="post-title"><?php echo $sport_val; ?> Picks</h1>
<h2 class="post-title">Detailed History</h2>
<form action='' method='post' class="f_p_filter_frm outside_table">
    <select  name='f_p_filter' class="f_p_filter" onchange='memberresults("detailed","<?php echo $sport; ?>",this.value)' >
    <?php
    $result = "SELECT * FROM ".$wpdb->prefix."bidsys_sport_seasons WHERE sport=  '".$sport."' AND current_season = 'NO'   ORDER BY start_date DESC";
     $newmeta = $wpdb->get_results($result);

    foreach($newmeta as $seasons ){
        ?>
    <option value='season_<?php echo $seasons->id;?>' ><?php echo $seasons->season_name;?></option>
    <?php  }
    ?>
    <option value='playoftheday30' >Play of the Day (L30 Days)</option>
    <option value='playoftheday365' >Play of the Day (L365 Days)</option>
    <option value='latebreakingplay30' >VIP Late Info Play (L30 Days)</option>
    <option value='latebreakingplay365' >VIP Late Info Play (L365 Days)</option>
    <option value='vipplays30' >VIP Plays (L30 Days)</option>
    <option value='vipplays365' >VIP Plays (L365 Days)</option>
    <option value='yesterday' selected="">Yesterday</option>
    <!--<option value='thisweek' >This Week</option>-->
    <option value='past7days' >Past 7 Days</option>
    <!--<option value='thismonth' >This Month</option>-->
    <option value='past30days' >Past 30 Days</option>
    <!-- <option value='thisyear' >This Year</option> -->
    <option value='current' >Current Season</option>
    <option value='past365days' >Past 365 Days</option>
    </select>
    </form>
<div style="width: 56px; float: right; background: #F8F8F8;"><img src="/wp-content/plugins/bid-sys/customgif/pushedPick.gif" />  Push</div><div style=" margin: -2px 3% 0; padding-bottom: 2px; float: right;">|</div>
<div style="width: 56px; float: right; background: #F8F8F8;"><img src="/wp-content/plugins/bid-sys/customgif/losingPick.gif" />  Loss</div><div style=" margin: -2px 3% 0; padding-bottom: 2px; float: right;">|</div>
<div style="width: 48px; float: right; background: #F8F8F8;"><img src="/wp-content/plugins/bid-sys/customgif/winningPick.gif" />  Win</div>
<table class='inner_result detailed_history'> 
<tr class="hdr_2">
<td>Game Date</td>
<td colspan="2">Game/Pick Details</td>
<td>Result</td>
<td>Unit Change</td>
</tr>
<table id='member_<?=$data_type;?>season_vals_inner' class='hdr_3'>
</table>
</table>
   <?php
        } else {

            ?>
        <h1 class="post-title"><?php echo $sport_val; ?> Picks</h1>
        <h2 class="post-title">Detailed History</h2>
        <div class="pmpro_content_message">You must be logged in to view this section.  Please <a href="<?=home_url();?>/login/">log in</a> or <a href="<?=home_url();?>/register/">register here</a>.</div>
        <?php

        }

    } else  if($data_type=="pending"){
      if (pmpro_hasMembershipLevel() ) {
   ?>
<script type='text/javascript'>
jQuery(document).ready(function(){
    memberresults("pending","<?php echo $sport;?>","");
});
</script>
<h1 class="post-title">Today's <?php echo $sport_val; ?> Picks</h1>
<table id='member_<?=$data_type;?>season_vals_inner' class='hdr_3'>
</table>
   <?php 
      }
        } else  if($data_type=="unauthorized"){
            if (pmpro_hasMembershipLevel() ) {
        ?>
<h1 class="post-title">Today's <?php echo $sport_val; ?> Picks</h1>
<div class="members-only">
Picks posted here are for <strong>PAID MEMBERS ONLY</strong>.<br> Your current membership level is not authorized to view this section.</strong><br> <a href="<?=home_url();?>/subscription-options/">Click Here</a> to upgrade your membership and view today's <?php echo $sport_val; ?> picks.</p></div>
        <?php
        }
      }

        else if($data_type=="defaultMessage"){
            if (pmpro_hasMembershipLevel() ) {
        ?>
        <!--INTENTIONALLY LEFT BLANK SO WHEN A MEMBER LOGS IN THE MESSAGE BELOW DISAPPEARS-->
        <?php

        } else {

        ?>
<div class="loggedout-members-only">
<p>Picks posted here are for <strong>PAID MEMBERS ONLY</strong>.<br>
<a href="http://wsplays-members.com/login/">Log In</a> &nbsp;-<strong>or</strong>-&nbsp; <a href="http://wsplays-members.com/subscription-options/">View/Purchase Subscriptions Here</a>.</p>
<p><a href="http://wsplays-members.com/membership-account/membership-checkout/?level=23">Click Here</a> to register for <strong>FREE PICKS</strong> and gain <strong>FREE ACCESS</strong><br> to our Pick History &amp; Detailed Records </p>
</div>
        <?php
        }
      }
   }
}
?>

php file shortcode

include('ajax_member_support.php');
function ajax_member_support( $atts ) {
    extract( shortcode_atts( array(
        'sport' => '',
        'type' => '',
    ), $atts ) );

     $sport_val = $sport;
     $data_type = $type;

ob_start();
memberresults($sport_val,$data_type);
$output_string=ob_get_contents();;
ob_end_clean();

return $output_string;

}
add_shortcode('get_biddata', 'ajax_member_support');

Javascript file

var memberresults =
        function memberresults(seasontype, sport, seasonrange) {
            "use strict";
            var ajaxl = '<img src="/wp-content/plugins/bid-sys/customgif/ajax-loader.gif" alt="" />',
                dataURL = "seasontype=" + seasontype + "&sport=" + sport + "&seasonrange=" + seasonrange;
            jQuery("#member_" + seasontype + "season_vals_inner").html(ajaxl);
            jQuery.ajax({
                type: "POST",
                url: "/wp-content/plugins/bid-sys/ajax_member.php",
                data: dataURL,
                success: function (msg) {  // alert(msg);
                    jQuery("#member_" + seasontype + "season_vals_inner").html(msg);
                }
            });
        };

The problem is that the plugin creates table id's member_currentseason_vals_inner, member_pastseason_vals_inner etc. Rendering 6 of each means 6 duplicate id's, whereas id's should be unique! The ajax puts its result in the first table it finds with that id, so all results will go into the 'NFL Football' tables.

The randomness you see is because for each sports the memberresults are fetched seperately via ajax, which is asynchronous, ie the content is rendered as it arrives in the browser. Any of the results may arrive last, and that's what you'll see in the NFL tables.

This could be fixed with a wrapper that serves as a context for js/jquery to find the correct table, but it's better to fix the unique id's. As I don't think you want each sport to be displayed more than once I propose appending the php $sport number to the table id's and adjusting the js to use that. The js memberresults() already receives this number as its 2nd parameter.

In the php memberresults function, change the following line, 4 times:

<table id='member_<?=$data_type;?>season_vals_inner' class='hdr_3 inner_result'>

to:

<table id='member_<?=$data_type;?>season_vals_inner<?=$sport;?>' class='hdr_3 inner_result'>

In the javascript memberresults change the following, 2 times:

jQuery("#member_" + seasontype + "season_vals_inner").html ...

to:

jQuery("#member_" + seasontype + "season_vals_inner" + sport).html ...