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

WordPress按元数据token动态加载对应反馈内容的技术问题

Fixing Your Company-Feedback WordPress System Issues

Let's break down the two main problems you're facing and walk through practical solutions to get everything working as intended:

1. Replace Static meta_value in WP_Query with Dynamic Company Token

The hardcoded token in your query is the root cause of it not matching different companies. Here's how to make it adapt to each company's unique token:

Step 1: Attach Company Token to the DOM

When rendering your list of company posts, store the company's token in a data attribute on the company container or "Show Feedback" button. This lets JavaScript access it later. Example template code:

<?php
$company_query = new WP_Query([
    'post_type' => 'post',
    'category_name' => 'company',
    'author' => get_current_user_id()
]);
if ($company_query->have_posts()) :
    while ($company_query->have_posts()) : $company_query->the_post();
        $company_token = get_post_meta(get_the_ID(), 'company_token', true);
?>
<div class="company-card" data-token="<?php echo esc_attr($company_token); ?>">
    <h3><?php the_title(); ?></h3>
    <p>Founded: <?php echo get_post_meta(get_the_ID(), 'company_year', true); ?></p>
    <button class="btn-create-feedback">Create New Feedback</button>
    <button class="btn-show-feedback">View All Feedback</button>
</div>
<?php
    endwhile;
    wp_reset_postdata();
endif;
?>

Step 2: Build a Dynamic AJAX-Powered Feedback Query

Instead of a static query, we'll use AJAX to fetch feedback using the company's token. Add this to your theme's functions.php:

// Register AJAX action for logged-in users
add_action('wp_ajax_get_company_feedback', 'fetch_company_feedback');
// Optional: For non-logged in users (if needed)
add_action('wp_ajax_nopriv_get_company_feedback', 'fetch_company_feedback');

function fetch_company_feedback() {
    // Verify security nonce
    check_ajax_referer('company_feedback_nonce', 'nonce');
    
    $token = isset($_POST['token']) ? sanitize_text_field($_POST['token']) : '';
    if (empty($token)) {
        wp_send_json_error('No company token provided');
    }

    // Query feedback posts linked to this company token
    $feedback_query = new WP_Query([
        'post_type' => 'post',
        'category_name' => 'feedback',
        'author' => get_current_user_id(),
        'meta_query' => [
            [
                'key' => 'company_token',
                'value' => $token,
                'compare' => '='
            ]
        ]
    ]);

    // Build HTML for feedback
    $feedback_html = '';
    if ($feedback_query->have_posts()) {
        $feedback_html .= '<ul class="feedback-list">';
        while ($feedback_query->have_posts()) : $feedback_query->the_post();
            $feedback_html .= sprintf(
                '<li><h4>%s</h4><p>%s</p></li>',
                get_the_title(),
                wp_trim_words(get_the_content(), 20)
            );
        endwhile;
        $feedback_html .= '</ul>';
        wp_reset_postdata();
    } else {
        $feedback_html = '<p>No feedback has been added for this company yet.</p>';
    }

    wp_send_json_success($feedback_html);
}

2. Update showFeedback Click Event to Load Dynamic Content

Replace the toggle-only behavior with code that fetches and displays the correct feedback for the clicked company:

First, add a security nonce and feedback container to your template (near the company list):

<?php wp_nonce_field('company_feedback_nonce', 'feedback_nonce'); ?>
<div id="feedback-display-area" style="display: none; margin-top: 20px;"></div>

Then add this JavaScript (enqueue it properly in your theme, or add it in a script tag at the end of the page):

document.addEventListener('DOMContentLoaded', function() {
    const showFeedbackBtns = document.querySelectorAll('.btn-show-feedback');
    const feedbackArea = document.getElementById('feedback-display-area');
    const nonce = document.querySelector('input[name="feedback_nonce"]').value;

    showFeedbackBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            const companyCard = this.closest('.company-card');
            const companyToken = companyCard.dataset.token;

            // Show loading state
            feedbackArea.style.display = 'block';
            feedbackArea.innerHTML = '<p>Loading feedback...</p>';

            // Fetch feedback via AJAX
            fetch(ajaxurl, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: new URLSearchParams({
                    action: 'get_company_feedback',
                    nonce: nonce,
                    token: companyToken
                })
            })
            .then(response => response.json())
            .then(data => {
                if (data.success) {
                    feedbackArea.innerHTML = data.data;
                } else {
                    feedbackArea.innerHTML = `<p>Error: ${data.data}</p>`;
                }
            })
            .catch(error => {
                feedbackArea.innerHTML = '<p>Failed to load feedback. Please try again later.</p>';
                console.error('Fetch error:', error);
            });
        });
    });
});

Quick Check for "Create New Feedback"

While you didn't mention issues here, double-check that when creating a feedback post, you save the parent company's token as a meta field named company_token. Example snippet for your feedback save handler:

// After creating the feedback post
$feedback_post_id = wp_insert_post([
    'post_title' => $feedback_title,
    'post_content' => $feedback_content,
    'post_status' => 'publish',
    'post_author' => get_current_user_id(),
    'post_category' => [get_cat_ID('feedback')]
]);

// Link feedback to the company via token
update_post_meta($feedback_post_id, 'company_token', $selected_company_token);

With these changes, your system will:

  • Dynamically pull feedback for each company using its unique token
  • Load and display the correct feedback content when clicking "View All Feedback"
  • Maintain security with nonce verification

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:13:54