WordPress默认图库指定分类筛选问题及图库类型确认
首先得明确:你肯定不是在用WordPress原生的默认图库——因为原生WP媒体库本身是没有分类功能的,默认只有「标签」选项。你在创建图库时看到的右侧分类面板,要么是主题自带的扩展功能,要么是安装了类似Media Library Categories这类插件添加的自定义分类法,这是导致你筛选失效的核心原因!
为什么category_name参数没用?因为category_name是给WordPress文章的默认分类(也就是category这个分类法)用的,而你的图库分类是一个自定义分类法,根本不是同一个东西,自然识别不了。
接下来给你具体的解决步骤:
1. 先确认你的图库分类对应的自定义分类法名称
你可以临时在主题的functions.php或者测试页面里加一段代码,输出所有可用的分类法,找到对应图库的那个:
<?php // 临时输出所有分类法,用完记得删掉 $taxonomies = get_taxonomies( array('public' => true), 'names' ); echo '<pre>'; print_r($taxonomies); echo '</pre>'; ?>
运行后你会看到类似array( 'category', 'post_tag', 'media_category' )这样的结果,那个非默认的就是你图库分类的分类法名称(比如media_category或者gallery_cat之类的)。
2. 修改短代码里的查询参数
把原来的'category_name' => 'beach'替换成tax_query数组,用你找到的自定义分类法名称来做筛选。比如如果分类法是media_category,分类slug是beach,代码就改成这样:
$args = array( 'post_type' => 'attachment', // 如果是自定义图库文章类型,换成对应的类型比如'gallery' 'post_status' => 'inherit', 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'media_category', // 这里填你找到的分类法名称 'field' => 'slug', // 用slug筛选,也可以换成'id'用分类ID 'terms' => 'beach', // 分类的slug或者ID ), ), ); $gallery_query = new WP_Query($args);
注意:如果你的图库是独立的自定义文章类型(不是原生媒体附件),记得把post_type改成对应的类型标识。
3. 验证测试
保存修改后刷新页面,应该就能正常筛选出beach分类下的图库内容了。如果还是不行,检查一下分类的slug是否拼写正确,或者换成分类ID来测试,避免slug大小写或字符错误。
总结一下:核心就是搞清楚你的图库分类用的是哪个自定义分类法,然后用tax_query来做筛选,而不是误用文章的category_name参数。
内容的提问来源于stack exchange,提问作者Serge Inácio

