如何用模板文件显示含相同meta_key「গল্প」的所有WordPress文章?
在WordPress中显示包含meta_key「গল্প」的文章
好问题!WordPress默认并没有像tag.php那样专门对应自定义meta_key的专用模板文件,因为自定义字段(meta)不属于WordPress内置的分类/标签这类 taxonomy 体系。不过我们有两种非常实用的方法来实现你的需求,下面一步步给你拆解:
方法一:创建自定义页面模板(最直观可控)
这种方法适合你想单独做一个页面来展示所有相关文章,步骤很简单:
- 找到你当前主题的
page.php文件,复制一份并重命名为page-galpo-posts.php(名字可以随便取,只要好记就行)。 - 在这个新文件的最顶部添加模板标识注释,这样后台创建页面时就能看到这个模板选项:
<?php /* Template Name: গল্প相关文章页 */ ?>
- 找到文件里的主循环部分(一般是
if (have_posts()) : while (have_posts()) : the_post();这段),把它替换成下面的自定义查询代码:
<?php // 定义查询参数:筛选存在「গল্প」这个meta_key的文章 $galpo_args = array( 'post_type' => 'post', // 如果是自定义文章类型,替换成对应的slug 'meta_key' => 'গল্প', 'meta_compare' => 'EXISTS', // 只要存在这个meta_key就返回,不管值是什么 'posts_per_page' => 10, // 每页显示的文章数量 'paged' => get_query_var('paged') ? get_query_var('paged') : 1, // 支持分页 ); // 初始化自定义查询 $galpo_query = new WP_Query($galpo_args); // 开始循环展示文章 if ($galpo_query->have_posts()) : while ($galpo_query->have_posts()) : $galpo_query->the_post(); // 这里可以用主题自带的内容模板,或者直接写展示代码 get_template_part('template-parts/content', get_post_format()); // 如果你想手动写,比如: // the_title('<h2 class="entry-title"><a href="' . get_permalink() . '">', '</a></h2>'); // the_excerpt(); endwhile; // 添加分页导航 the_posts_pagination(array( 'total' => $galpo_query->max_num_pages, 'prev_text' => __('上一页'), 'next_text' => __('下一页'), )); // 重置查询,避免干扰后续的WordPress默认查询 wp_reset_postdata(); else : // 没有找到文章时的提示 echo '<p class="no-posts">暂时没有找到相关文章</p>'; endif; ?>
- 保存文件后,登录WordPress后台,新建一个页面,在右侧的「页面属性」里选择刚才创建的「গল্প相关文章页」模板,发布页面后访问这个页面,就能看到所有包含「গল্প」meta_key的文章了。
方法二:用pre_get_posts钩子修改主查询(适合在现有页面集成)
如果你不想单独做页面,想在某个现有页面(比如博客首页、某个归档页)自动筛选出这些文章,可以用钩子来修改默认查询:
- 打开主题的
functions.php文件,添加下面的代码:
add_action('pre_get_posts', 'filter_posts_by_galpo_meta'); function filter_posts_by_galpo_meta($query) { // 只在前台的主查询生效,避免影响后台和其他小查询 if (!is_admin() && $query->is_main_query()) { // 这里可以添加条件,比如只在slug为「galpo」的页面生效 if (is_page('galpo')) { $query->set('meta_key', 'গল্প'); $query->set('meta_compare', 'EXISTS'); $query->set('post_type', 'post'); } } }
- 保存后,你只需要创建一个slug为
galpo的页面(用默认的page.php模板),访问这个页面时,主查询就会自动过滤出包含「গল্প」meta_key的文章。
额外补充:如果需要筛选特定meta_value的文章
如果你不仅要存在这个meta_key,还要筛选它的某个特定值(比如「গল্প」的meta_value是「短篇小说」),只需要修改查询参数:
'meta_key' => 'গল্প', 'meta_value' => '短篇小说', // 替换成你要筛选的值 'meta_compare' => '=',
内容的提问来源于stack exchange,提问作者Abdus Sattar Bhuiyan
相关产品推荐
相关产品推荐

