Ajax wordpress : 数据不传输到模板

问题描述 投票:0回答:1

在我的 WordPress 网站中,我尝试在单击类别后显示帖子。

这是我的 JS 函数:


    function loading_posts_categories($) {

        $('#categories a').on('click', function (e) {

            e.preventDefault();
        
            var category = $(this).data('category');

            $.ajax({
                type: 'POST',
                url: adminAjax.ajax_url, 
                data: {
                    action: 'fetch_posts_by_category',
                    category: category,
                },
                success: function (response) {
                    var container = $('#posts-container');
                    container.hide();
                    container.html(response.template).fadeIn();
                },
                error: function (xhr, status, error) {
                    console.log( xhr.responseText );
                }
           });
        });
    };

这是我的 php 函数:


function fetch_posts_by_category() {

    if (empty($_POST['category'])) {
        wp_send_json_error('Category not provided.');
    }

    $category = sanitize_text_field($_POST['category']);

    $posts = get_posts([
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => -1,
        'category_name' => $category,
    ]);

    ob_start();
    //require get_template_directory() . '/template-parts/template-posts-container.php';
    get_template_part('template-parts/template-posts-container', null, [ 'custom_posts' => $posts ] );
    $template_content = ob_get_clean();
    

    wp_send_json([
        'template'  => $template_content,
        ]
    );
    die();
}

我有这个模板 template-posts-container.php :

<div id="posts-container">
    <?php foreach ($custom_posts as $post): ?>
        <h2><?php echo esc_html($post['title']); ?></h2>
        <div class="post-content"><?php echo wp_kses_post($post['content']); ?></div>
    <?php endforeach; ?>
</div>

这是我的模板,称为 template-posts (我如何在该模板和 template-posts-container 之间建立链接?)。这是我页面上显示的模板。

<?php $categories = get_categories(); ?>

<div id="categories">
   <ul>
        <?php foreach ($categories as $category) : ?>
            <li><a href="#" data-category="<?= $category->slug; ?>"><?= $category->name; ?></a></li>
        <?php endforeach; ?>
   </ul>
</div>
<div id="years-container"></div>

我的问题:

当我将帖子转储到 PHP 函数中时,我会根据正确显示的类别获取所有帖子。 但是,模板仍然是空的。我无法将我的帖子传递到我的模板。 问题出在哪里?

非常感谢您的帮助

php ajax wordpress
1个回答
0
投票
<?php extract($args); ?>
<div id="posts-container">
    <?php foreach ($custom_posts as $post): ?>
        <?php echo $post->post_title; ?>
    <?php endforeach; ?>
</div>

在模板中。解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.