在我的 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 extract($args); ?>
<div id="posts-container">
<?php foreach ($custom_posts as $post): ?>
<?php echo $post->post_title; ?>
<?php endforeach; ?>
</div>
在模板中。解决了问题。