WordPress

Jak zatrzymać lustrzane odbicie zdarzeń JS w krótkich kodach umieszczonych na tej samej stronie?

  • 27 kwietnia, 2023
  • 3 min read
Jak zatrzymać lustrzane odbicie zdarzeń JS w krótkich kodach umieszczonych na tej samej stronie?


Tworzę prosty krótki kod, który wyświetli ostatnie posty na blogu w formacie z zakładkami. Karta jest tworzona przy użyciu Vanilla JS.

Ale problem polega na tym, że gdy dwa lub więcej wystąpień krótkiego kodu jest używanych na tej samej stronie, JS display/hide działania odzwierciedlają się nawzajem, co oznacza, że ​​​​jeśli kliknę kartę w Shortcoe-1, zawartość Div wewnątrz Shortcode-2 wyświetla/ukrywa się i odwrotnie. Każda sugestia zostanie doceniona.

Krótki kod WP

function tab_posts(){
    ob_start();?>
    <div class="tab-area">
    <ul id="alltabs" class="tab-heads" role="tablist">
   <??php
    $categories = get_categories($args);
    foreach ($categories as $category) { ?>
     <li class="tab">
     <span onclick="clickOnTab(event, '<?php echo $category->slug;?>')"  class="catname" role="tab" data-toggle="tab"><?php echo $category->name;?></span>
     </li>
    <?php } ?>
   </ul>
   <section class="content-body">
    <?php
    foreach ($categories as $category) {
        ?>
       <div class="pane" id="<?php echo $category->slug;?>">
       <?php
       $cust_query = new WP_Query(array(
            'post_type' => 'post',
            'posts_per_page' => 5,
            'category_name' => $category->slug,
            'post_status' => 'publish'
        ));
        if ($cust_query->have_posts()):
          while ($cust_query->have_posts()):
                $cust_query->the_post();
               ?>
        <div class="articles">
        <a class="image" href="<?php the_permalink(); ?>">
        <?php if (has_post_thumbnail()){
               the_post_thumbnail(array(550,350 ));
         } ?>
         </a><h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
            </div>
    <?php endif;?>
    </div><!---tab pane-->
        <?php
    }
?>
    </section><!---tab content-->
    </div><!--post tab pane-->
    <?php
    endwhile;
        endif;
    wp_reset_postdata();
    $output = ob_get_clean();
    return $output;
}
add_shortcode('tab_posts', 'tab_posts');

Kod JS

function add_js(){
    ob_start(); ?>
    <script language="javascript" type="text/javascript">
    document.addEventListener("DOMContentLoaded", function () {
    var elems = document.getElementsByClassName('tab-heads');
    for (var i=0;i<elems.length;i+=1){
    elems[i].style.display = 'block';
}
}); 
    function clickOnTab(event, tabHead) {
        event.stopPropagation();
        var i, tbody, tlinks;
        tbody = document.getElementsByClassName("pane");    
    for (i = 0; i < tbody.length; i++) {
        tbody[i].style.display = "none";
    }
    tlinks = document.getElementsByClassName("catname");
        for (i = 0; i < tlinks.length; i++) {
    tlinks[i].className = tlinks[i].className.replace(" active", "");
  }
  document.getElementById(tabHead).style.display = "block";
  event.currentTarget.className += " active";
}
</script>
<?php
echo ob_get_clean();
}
add_action('wp_footer', 'add_js');


Źródło

Warto przeczytać!  rozwiązywanie problemów - Obrazy automatycznie usuwane dokładnie po dziewięciu miesiącach... a może moja wizyta wywołała jakiś atak serca?