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



向WordPress页面添加标签

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

我正在使用这段代码(在我的子主题函数.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查询。这是我在谷歌上找到的一个(旧(片段,我为什么要寻找解决方案。我不确定这是否仍然是一条路,但我找不到任何可行的替代方案。

// 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');

有什么想法可以让它发挥作用吗?

一些额外信息

  • WordPress 5.7.2
  • 我正在使用主题和(自定义(子主题的组合。主题使用古腾堡编辑器
  • 上面的代码片段已添加到子主题函数中。php
  • 没有特定的tag.php或archive.php。标记页面使用默认的index.php来显示标记页面。这个index.php也用于分类、归档等

创建一个可以用于所有标签的新文件,并将其命名为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_tag术语的帖子和页面。

最新更新