WordPress开发笔记

WordPress获取自定义分类法中所有分类下的所有文章

想在WordPress中获取自定义分类法 tuisong 下所有分类的所有文章,核心方法是使用 WP_Query 并结合 tax_query 参数。下面我将为你详细解释如何操作,并提供一些实用示例。

核心方法:使用 WP_Query

你可以通过 WP_Query 来查询特定自定义分类法下的所有文章,无论属于哪个具体分类。下面是基本的代码结构:

<?php
$args = array(
    'post_type'      => 'post', // 如果是自定义文章类型,替换为你的文章类型名称,例如 'my_custom_post'
    'posts_per_page' => -1,     // 获取所有文章,设置-1表示获取所有文章,但需注意性能
    'tax_query'      => array(
        array(
            'taxonomy' => 'tuisong', // 你的自定义分类法名称
            'operator' => 'EXISTS'   // 获取所有具有此分类法的文章,无论具体术语
        )
    )
);

$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        // 在这里输出文章信息,例如:
        echo '<h2>' . get_the_title() . '</h2>';
        echo '<div>' . get_the_excerpt() . '</div>';
        echo '<a href="' . get_permalink() . '">阅读更多</a>';
    }
} else {
    echo '没有找到相关文章。';
}

wp_reset_postdata(); // 重置文章数据
?>

获取特定分类下的文章

如果你只想获取 tuisong 分类法中某个特定分类下的所有文章,你可以使用以下代码示例。这里假设你知道该分类的术语ID、别名或名称。

1. 按分类术语ID查询

$args = array(
    'post_type'      => 'post', // 根据需要替换为你的文章类型
    'posts_per_page' => -1,
    'tax_query'      => array(
        array(
            'taxonomy' => 'tuisong',
            'field'    => 'term_id', // 按术语ID查询
            'terms'    => array(123, 456), // 替换为你的具体分类术语ID数组
            'operator' => 'IN' // 包含所有指定术语的文章
        )
    )
);

2. 按分类术语别名查询

$args = array(
    'post_type'      => 'post',
    'posts_per_page' => -1,
    'tax_query'      => array(
        array(
            'taxonomy' => 'tuisong',
            'field'    => 'slug', // 按术语别名查询
            'terms'    => array('some-term-slug'), // 替换为你的具体分类术语别名数组
            'operator' => 'IN'
        )
    )
);

获取分类法中的分类术语

有时候,你可能想先获取自定义分类法 tuisong 下的所有分类术语,然后再循环获取每个术语下的文章。

// 获取tuisong分类法中的所有分类术语
$terms = get_terms(array(
    'taxonomy'   => 'tuisong',
    'hide_empty' => false, // 是否隐藏空分类
));

if (!empty($terms) && !is_wp_error($terms)) {
    foreach ($terms as $term) {
        // 获取当前术语下的文章
        $post_args = array(
            'post_type'      => 'post',
            'posts_per_page' => -1,
            'tax_query'      => array(
                array(
                    'taxonomy' => 'tuisong',
                    'field'    => 'slug',
                    'terms'    => $term->slug,
                )
            )
        );
        $term_query = new WP_Query($post_args);
        // ... 然后循环输出文章,同上
        wp_reset_postdata();
    }
}

关键参数说明

下表总结了 WP_Querytax_query 部分的一些常用参数选项,帮助你更好地理解和定制你的查询:

参数描述常用值
taxonomy要查询的自定义分类法名称‘tuisong’(你的分类法名称)
field用于匹配术语的字段‘term_id’, ‘slug’, ‘name’
terms要匹配的术语值(数组或字符串)array(123, 456), ‘some-term’
operator术语查询的逻辑操作符‘IN’(包含), ‘NOT IN’(排除), ‘AND’(全部包含)
include_children是否包含子术语(通常对于分层分类法如类别有效)true(默认), false
posts_per_page要获取的文章数量,-1表示获取所有文章10, -1

性能与分页建议

谨慎使用 'posts_per_page' => -1:这可能会拖慢大型网站的加载速度。在生产环境中,强烈建议设置合理的分页

实现分页:可以使用 'paged' 参数。

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    // ... 其他参数
    'posts_per_page' => 10, // 每页显示10篇文章
    'paged'          => $paged,
);

之后你需要在循环结束后添加分页导航代码。

考虑缓存:对于不常更新的查询,可以考虑使用缓存插件来优化性能。

其他相关函数

  • get_posts()WP_Query 的一个简单替代,适用于简单查询,返回文章数组而非对象。
  • get_terms():获取分类法中的术语列表,如上文示例所示。
  • wp_get_post_terms():获取某篇文章所属的特定分类法的所有术语。

注意事项

  • 将代码中的 'tuisong' 替换为你的实际自定义分类法名称。
  • 'post' ('post_type' 参数) 替换为你的自定义文章类型名称(如果不是默认的”文章”)。
  • 在使用分页时,确保你的WordPress固定链接设置正确。
  • 处理分类术语时,总是检查 !is_wp_error($terms) 是个好习惯。

希望以上信息能帮助你顺利获取到所需的自定义分类法文章。