如何在 WordPress 标签页上显示帖子和页面?

How to display posts and pages on a WordPress tag page?

向 WordPress 页面添加标签

当我在 WordPress 标签页上时,我尝试显示带有相同标签的帖子和页面。我正在使用一些自定义代码来将标签功能添加到 WordPress 页面。向页面添加标签是可行的,当我在页面模板中使用 <?php the_tags(); /> 时,我也可以在页面上显示标签。

我正在使用此代码(在我的子主题 functions.php 中)将标签功能注册到页面:

// Add tag support to pages
function tags_support_all() {
    register_taxonomy_for_object_type('post_tag', 'page');
}
add_action('init', 'tags_support_all');

问题 - 带有标签的页面没有显示在标签页上

我似乎找不到让这些页面显示在标签页上的方法。它只显示标有相同标签的帖子。没有页面。我使用下面的代码尝试通过将 post_type 设置为 'any' 来更新 pre_get_posts 查询。这是我在 Google 上找到的一个(旧)片段,为什么我正在寻找解决方案。我不确定这是否仍然可行,但我找不到任何可行的替代方案。

// Display all post types on tag pages
function tags_support_query($wp_query) {
    if ($wp_query->get('tag')) {
        $wp_query->set('post_type', 'any');
    }
}
add_action('pre_get_posts', 'tags_support_query');

关于如何让它工作有什么想法吗?

一些额外信息:

创建一个可用于所有标签的新文件并将其命名为 tag.php。这将允许该文件呈现所有标签相关的存档页面。其他类别和档案将保持不变。

在这个新文件中复制 index.php 的所有内容,但在文件顶部添加以下代码。

/**
 * Get the Term ID of the current term.
 */
$term = get_queried_object();
$term_id = $term->term_id;

/**
 * Get all posts and pages with the current term.
 */
$args = array(
  'post_type'      => array('post', 'page'),
  'posts_per_page' => -1,
  'post_status'    => 'publish',
  'tax_query'      => array(
     array(
       'taxonomy'    => 'post_tag',
       'field'       => 'term_id',
       'terms'       => [$term_id]
     )
   )
);

/**
 * Create a new query.
 */
$query = new WP_Query($args);

然后替换所有出现以下情况的地方:

if ( have_posts() ) {
// replace with
if ( $query->have_posts() ) {

,

while ( have_posts() ) {
// replace with
while ( $query->have_posts() ) {

the_post();
// replace with
$query->the_post();

然后在while循环的右括号后,添加wp_reset_postdata();以确保与页面相关的post数据已被重置。 (否则循环中最新的 post 将被视为页面的 post)。

这应该(至少)允许您访问 post 和具有与页面对应的 post_tag 术语的页面。