WordPress获取指定分类及其所有子分类文章

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>';
}
?>

请注意以下几点:

  1. 递归函数get_all_category_ids_recursive函数使用递归来获取指定分类及其所有子分类的ID。这是因为WordPress的分类可以是多层嵌套的,所以我们需要一个递归函数来遍历所有层级。
  2. 查询参数:在WP_Query中,我们使用'category__in' => $category_ids来指定查询的分类ID。posts_per_page设置为-1表示获取所有文章。您可以根据需要调整orderbyorder参数来更改文章的排序方式。
  3. 输出文章:在循环中,我们使用the_post()函数来设置全局的$post对象,然后可以调用如get_the_title()the_content()等函数来输出文章的信息。
  4. 样式和分隔线:您可以根据需要添加样式和分隔线来美化输出。在示例中,我使用了<hr>标签来添加一条水平线作为分隔。
  5. 重置文章数据:在循环结束后,使用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 结束 -->