You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Podcast自定义文章类型分类筛选失效,求技术解决方案

播客自定义分类筛选失效问题修复方案

问题根源

  1. 自定义模板中使用query_posts硬编码查询条件,完全忽略前端筛选参数,导致始终显示所有播客。
  2. pre_get_posts钩子的触发条件匹配错误(当前页面是自定义模板页,不是播客归档页),无法生效。
  3. get_terms中hide_empty参数使用字符串'false',PHP会将其解析为布尔值true,导致隐藏空分类。

修复步骤

1. 修改自定义模板文件(News & Media模板)

替换原查询代码,使用WP_Query处理筛选逻辑:

<?php
/*Template Name: News & Media */
get_header();
?>

<div class="singlewidth">
<div id="primary">

<form method='GET'>
  <select name='podcast_category' id='podcast_category'>
    <option value="">所有播客</option>
    <?php
    $terms = get_terms([
      'taxonomy' => 'podcast_category',
      'hide_empty' => false
    ]);
    foreach ($terms as $term) :
    $selected = (isset($_GET['podcast_category']) && sanitize_text_field($_GET['podcast_category']) === $term->slug) ? 'selected' : '';
    ?>

      <option value='<?php echo esc_attr($term->slug); ?>' <?php echo $selected; ?>><?php echo esc_html($term->name); ?></option>

    <?php endforeach; ?>
  </select>
  <button type='submit'>筛选</button>
</form>

<div class="podcasts">
<ul>

<?php
$args = array(
   'post_type' => 'podcast',
   'posts_per_page' => -1,
);

if (isset($_GET['podcast_category']) && !empty($_GET['podcast_category'])) {
    $args['tax_query'] = array(
        array(
            'taxonomy' => 'podcast_category',
            'field' => 'slug',
            'terms' => sanitize_text_field($_GET['podcast_category']),
        )
    );
}

$podcast_query = new WP_Query($args);

if ($podcast_query->have_posts()) : 
    while ($podcast_query->have_posts()) : $podcast_query->the_post(); ?>

<li>
 <?php if ( has_post_thumbnail() ) { echo '<div class="featured-thumb clearfix">'; the_post_thumbnail(); echo '</div>'; } ?>

<div class="podcasttext">
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'azurebasic' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>

<?php if( get_field('podcast_text') ): ?>
    <?php the_field('podcast_text'); ?>
<?php endif; ?>
</div>

<div class="podcastplayer">
<?php if( get_field('add_podcast') ): ?>
    <?php the_field('add_podcast'); ?>
<?php endif; ?>
</div>

</li>

<?php 
    endwhile; 
    wp_reset_postdata();
endif;
?>

</ul>

</div>
</div>
</div>

<?php  get_footer();  ?>

2. 删除functions.php中无效代码

移除以下无用的pre_get_posts钩子代码:

add_action('pre_get_posts', 'altering_podcast_archive_query', 99);
function altering_podcast_archive_query($query)
{
    if (
        is_post_type_archive('podcast') 
        && 
        get_query_var('orderby')
       ) 
    {
        $tax_query = array(
            array(
                'taxonomy' => 'podcast_category',
                'field' => 'slug',
                'terms' => sanitize_text_field(get_query_var('orderby')),
            )
        );
        $query->set('tax_query', $tax_query);
    };
};

关键修改说明

  • 将筛选参数名从orderby改为podcast_category,避免与WordPress默认查询参数冲突,语义更清晰。
  • 使用WP_Query替代query_posts,既能灵活添加筛选条件,又不会破坏主查询的全局状态。
  • 修正hide_empty参数类型为布尔值false,确保显示所有分类。
  • 添加“所有播客”默认选项,支持重置筛选状态。
  • 移除无效的pre_get_posts钩子,因为当前页面不是播客归档页,该钩子永远不会触发。

内容的提问来源于stack exchange,提问作者Peggy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:08:10