You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一页面使用两个[swt_mm] Shortcode仅一个生效问题求助

Troubleshooting Your Dual Shortcode Issue

Hey there! Let's figure out why only your first [swt_mm post_id=111] shortcode works, while the second one [swt_mm post_id=112] fails to load. This is a super common pitfall with custom WordPress shortcodes, and it almost always boils down to variable conflicts, duplicate DOM identifiers, or one-off JavaScript initialization. Here's how to diagnose and fix each scenario:

1. Global Variable Collisions

If your shortcode function relies on global variables (like an un-prefixed $post_id or a shared instance variable), the first shortcode execution will overwrite that variable, leaving the second shortcode with incorrect data.

Fix: Switch to local variables inside your shortcode function. For example:

function swt_mm_shortcode($atts) {
    // Use local variables instead of globals
    $args = shortcode_atts(['post_id' => 0], $atts);
    $local_post_id = $args['post_id'];

    // Start output buffering to capture content
    ob_start();
    // Your shortcode logic here (use $local_post_id, not a global $post_id)
    ?>
    <div class="swt-mm-content">
        <!-- Content tied to <?php echo $local_post_id; ?> -->
    </div>
    <?php
    return ob_get_clean();
}
add_shortcode('swt_mm', 'swt_mm_shortcode');

2. Duplicate DOM Element IDs

If your shortcode outputs HTML with hardcoded IDs (e.g., <div id="swt-mm-container">), browsers will only recognize the first instance of that ID. Any JavaScript targeting that ID will ignore the second element entirely.

Fix: Generate a unique ID for each shortcode instance. You can combine the post_id with uniqid() for uniqueness:

function swt_mm_shortcode($atts) {
    $args = shortcode_atts(['post_id' => 0], $atts);
    $unique_id = 'swt-mm-' . $args['post_id'] . '-' . uniqid();

    ob_start();
    ?>
    <div id="<?php echo esc_attr($unique_id); ?>" class="swt-mm-container">
        <!-- Content for post <?php echo $args['post_id']; ?> -->
    </div>
    <script>
        // Target the unique ID instead of a generic one
        const container = document.getElementById('<?php echo esc_attr($unique_id); ?>');
        // Add your JS logic here for this specific instance
    </script>
    <?php
    return ob_get_clean();
}

3. JavaScript Initialization Runs Only Once

If your shortcode's JavaScript is initialized once on page load (e.g., inside a single DOMContentLoaded listener that only finds the first element), the second shortcode won't get initialized.

Fix: Either use class selectors to target all instances, or encapsulate your JS logic into a reusable function that gets called per shortcode:

function swt_mm_shortcode($atts) {
    $args = shortcode_atts(['post_id' => 0], $atts);
    $unique_id = 'swt-mm-' . $args['post_id'];

    ob_start();
    ?>
    <div id="<?php echo esc_attr($unique_id); ?>" class="swt-mm-container" data-post-id="<?php echo $args['post_id']; ?>">
        <!-- Content -->
    </div>
    <script>
        // Call the initialization function for this specific instance
        initSwtMmInstance('<?php echo esc_attr($unique_id); ?>', <?php echo $args['post_id']; ?>);
    </script>
    <?php
    return ob_get_clean();
}

// Add the reusable initialization function to the footer
add_action('wp_footer', function() {
    ?>
    <script>
        function initSwtMmInstance(elementId, postId) {
            const element = document.getElementById(elementId);
            // Your initialization logic here (e.g., event listeners, data fetching)
            console.log('Initializing SWT MM for post:', postId);
        }
    </script>
    <?php
});

4. Output Buffering Misconfiguration

If your shortcode directly echoes content instead of using output buffering, it can disrupt the order of content rendering, causing the second shortcode's output to be lost or overridden.

Fix: Always use ob_start() and ob_get_clean() to capture your shortcode's output instead of echoing directly. This ensures each shortcode's content is returned as a single string, which WordPress can properly insert into the page.

If you can share the actual code of your swt_mm shortcode, I can give you even more targeted fixes!

内容的提问来源于stack exchange,提问作者Abhishek Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:25:56