WordPress获取指定分类及其所有子分类文章
在WordPress中,要获取指定分类及其所有子分类的文章,您可以使用递归函数来获取所有相关的分类ID,然后使用WP_Query
来查询这些分类下的文章。以下是一个完整的示例代码,它演示了如何实现这一功能:
<?php
// 获取指定分类及其所有子分类的ID的函数
function get_all_category_ids_recursive($parent_category_id) {
$category_ids = array($parent_category_id); // 包含父分类ID
$categories = get_categories(array('child_of' => $parent_category_id, 'hide_empty' => false));
foreach ($categories as $category) {
$category_ids = array_merge($category_ids, get_all_category_ids_recursive($category->cat_ID)); // 递归获取子分类ID
}
return $category_ids;
}
// 指定父分类ID
$parent_category_id = 6; // 替换为您需要的分类ID
// 获取所有相关分类ID
$category_ids = get_all_category_ids_recursive($parent_category_id);
// 创建WP_Query对象来查询文章
$query_args = array(
'category__in' => $category_ids,
'posts_per_page' => -1, // 获取所有文章
'orderby' => 'date', // 根据日期排序,可以根据需要更改
'order' => 'DESC' // 降序排列
);
$query = new WP_Query($query_args);
// 检查是否有文章
if ($query->have_posts()) {
// 循环输出文章
while ($query->have_posts()) {
$query->the_post();
// 输出文章标题
echo '<h2>' . get_the_title() . '</h2>';
// 输出文章内容(可选)
the_content();
// 输出其他文章信息(如需要)
// 例如:echo '<p>' . get_the_date() . '</p>'; // 输出文章日期
// 例如:echo '<p>' . get_the_author() . '</p>'; // 输出文章作者
// 添加分隔线或其他样式(可选)
echo '<hr>';
}
// 重置文章数据
wp_reset_postdata();
} else {
// 没有找到文章
echo '<p>没有找到指定分类及其子分类下的文章。</p>';
}
?>
请注意以下几点:
- 递归函数:
get_all_category_ids_recursive
函数使用递归来获取指定分类及其所有子分类的ID。这是因为WordPress的分类可以是多层嵌套的,所以我们需要一个递归函数来遍历所有层级。 - 查询参数:在
WP_Query
中,我们使用'category__in' => $category_ids
来指定查询的分类ID。posts_per_page
设置为-1
表示获取所有文章。您可以根据需要调整orderby
和order
参数来更改文章的排序方式。 - 输出文章:在循环中,我们使用
the_post()
函数来设置全局的$post
对象,然后可以调用如get_the_title()
、the_content()
等函数来输出文章的信息。 - 样式和分隔线:您可以根据需要添加样式和分隔线来美化输出。在示例中,我使用了
<hr>
标签来添加一条水平线作为分隔。 - 重置文章数据:在循环结束后,使用
wp_reset_postdata()
函数来重置全局的$post
对象和其他与查询相关的数据,以确保后续的代码不会受到此次查询的影响。
请将上述代码放置在您想要显示文章的位置,比如WordPress主题的模板文件中。如果您想要进一步定制输出,可以在循环中添加更多的HTML和WordPress模板标签。
修改后的代码:加样式
<!-- wordpress获取指定分类文章,调用缩略图,标题,日期,作者,分类,标签,随机排序,分类ID5 开始 -->
<div class="row gutter-parent-10">
<?php
// 获取指定分类及其所有子分类的ID的函数
function get_all_category_ids_recursive($parent_category_id) {
$category_ids = array($parent_category_id); // 包含父分类ID
$categories = get_categories(array('child_of' => $parent_category_id, 'hide_empty' => false));
foreach ($categories as $category) {
$category_ids = array_merge($category_ids, get_all_category_ids_recursive($category->cat_ID)); // 递归获取子分类ID
}
return $category_ids;
}
// 指定父分类ID
$parent_category_id = 5; // 替换为您需要的分类ID
// 获取所有相关分类ID
$category_ids = get_all_category_ids_recursive($parent_category_id);
// 创建WP_Query对象来查询文章
$query_args = array(
'category__in' => $category_ids,
'posts_per_page' => 60, // -1 获取所有文章 右以替换为您想要显示的文章数量
'orderby' => 'rand', // 根据日期排序,可以根据需要更改 'rand'随机排序 'date'按照日期排序
'order' => 'DESC' // 降序排列
);
$query = new WP_Query($query_args);
// 检查是否有文章
if ($query->have_posts()) {
// 循环输出文章
while ($query->have_posts()) {
$query->the_post();
// 获取文章的永久链接
$permalink = get_permalink();
echo '<div class="col-sm-6 col-lg-3 post-col">'; //我加的
echo '<div class="post-boxed">'; //我加的
echo '<div class="post-img-wrap">'; //我加的 post-img-wrap
// 输出文章缩略图并添加A标签
if (has_post_thumbnail()) {
$thumbnail_id = get_post_thumbnail_id($post->ID);
$thumbnail_url = wp_get_attachment_image_src($thumbnail_id, 'large'); // 你可以指定其他尺寸,如 'thumbnail' 缩略图 , 'medium' 中等 , 'large' 大图 , 'full' 全图 或自定义尺寸
if ($thumbnail_url) {
echo '<div class="featured-post-img"> <a href="'.$permalink.'" class="post-img" style="background-image:url('.$thumbnail_url[0].');"></a></div>';
}
}
// 输出文章分类并添加A标签
$categories = get_the_category();
if (!empty($categories)) {
echo '<div class="entry-meta category-meta"><div class="cat-links">';
foreach ($categories as $category) {
echo '<a href="' . get_category_link($category->term_id) . '">' . $category->cat_name . '</a> ';
}
echo '</div></div>';
}
// 输出文章标签并添加A标签
$tags = get_the_tags();
if (!empty($tags)) {
echo '<div class="entry-meta category-meta"><div class="cat-links">';
foreach ($tags as $tag) {
echo '<a href="' . get_tag_link($tag->term_id) . '">' . $tag->name . '</a> ';
}
echo '</div></div>';
}
echo '</div>'; //我加的 post-img-wrap
echo '<div class="post-content">'; //我加的
// 输出文章标题并添加A标签
echo '<h3 class="entry-title"><a href="' . $permalink . '">' . get_the_title() . '</a></h3>';
echo '<div class="entry-meta">'; //我加的
// 输出文章日期并添加A标签(通常日期不需要链接,但这里按要求添加)
echo '<div class="date"><a href="' . $permalink . '">' . get_the_date() . '</a></div>';
// 输出文章作者并添加A标签(通常作者不需要链接,但这里按要求添加,可以链接到作者页面)
// echo '<div class="by-author vcard author"><a href="' . get_author_posts_url(get_the_author_meta('ID')) . '">' . get_the_author() . '</a></div>';
echo '</div>'; //我加的
echo '</div>'; //我加的
echo '</div>'; //我加的
echo '</div>'; //我加的
}
// 重置文章数据
wp_reset_postdata();
} else {
// 没有找到文章
echo '<p>没有找到指定分类下的文章。</p>';
}
?>
</div>
<!-- wordpress获取指定分类文章,调用缩略图,标题,日期,作者,分类,标签,随机排序,分类ID5 结束 -->