向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
术语的帖子和页面。