如何解决如何在 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');
关于如何让它工作的任何想法?
一些额外信息:
- wordpress 5.7.2 版。
- 我正在使用主题和(自定义)子主题组合。主题使用古腾堡编辑器。
- 以上代码片段添加到子主题functions.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_tag
术语的帖子和页面。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。