为什么我在尝试访问没有任何条款的taxonomy.php 页面时收到 404 错误(Wordpress 看不到分类页面)

2023-12-03

我正在尝试创建分类页面,因此我使用分类法taxonomy-nowe.php 创建了分类法

但我的 WP 看不到该页面,或者我弄乱了重写 URL?有人可以检查我的代码并看看我是否做错了什么。我通过保存平原来刷新永久链接,然后返回到帖子名称永久链接。但我没有得到结果。

我想实现这样的目标:domain.pl/oferta/kopiarki/nowe

// custom post type
function td_devices_posttype() {
 $labels = array(
     'name'                => _x( 'Kopiarki', 'Ogólna nazwa wpisów', 'textdomain' ),
     'singular_name'       => _x( 'Kopiarka', 'Pojedyńcza nazwa wpisu', 'textdomain' ),
     'menu_name'           => esc_html__( 'Kopiarki', 'textdomain' ),
     'parent_item_colon'   => esc_html__( 'Rodzic', 'textdomain' ),
     'all_items'           => esc_html__( 'Wszystkie kopiarki', 'textdomain' ),
     'view_item'           => esc_html__( 'Wyświetl kopiarki', 'textdomain' ),
     'add_new_item'        => esc_html__( 'Dodaj nową kopiarkę', 'textdomain' ),
     'add_new'             => esc_html__( 'Dodaj nową', 'textdomain' ),
     'edit_item'           => esc_html__( 'Edytuj Kopiarkę', 'textdomain' ),
     'update_item'         => esc_html__( 'Zaktualizuj kopiarkę', 'textdomain' ),
     'search_items'        => esc_html__( 'Szukaj kopiarkę', 'textdomain' ),
     'not_found'           => esc_html__( 'Nie zanleziono', 'textdomain' ),
     'not_found_in_trash'  => esc_html__( 'Nie znaleziono w koszu', 'textdomain' )
 );
 $args = array(
     'label'               => esc_html__( 'kopiarki', 'textdomain' ),
     'description'         => esc_html__( 'Wszystkie kopiarki', 'textdomain' ),
     'labels'              => $labels,
     'taxonomies'          => array( 'nowe' ),
     'hierarchical'        => true,
     'public'              => true,
     'show_ui'             => true,
     'show_in_menu'        => true,
     'show_in_nav_menus'   => true,
     'show_in_admin_bar'   => true,
     'menu_position'       => 100,
     'can_export'          => true,
     'has_archive'         => true,
     'exclude_from_search' => false,
     'publicly_queryable'  => true,
     'query_var'           => true,
     'show_admin_column'   => true,
     'capability_type'     => 'page',
     'rewrite'             => array('slug' => 'oferta/kopiarki'),
     'supports'            => array( 'title','editor','thumbnail', 'custom-fields')
 );
 register_post_type( 'kopiarki', $args );
  //flush_rewrite_rules();
}
add_action( 'init', 'td_devices_posttype' );

// custom taxonomies new
function new_posttype_taxonomy() {
    $labels = array(
        'name'                  => 'Nowe',
        'singular_name'         => 'Nowa',
        'search_items'          => 'Szukaj nowych',
        'all_items'             => 'Wszystkie nowe kopiarki',
        'parent_item'           => 'Rodzic',
        'parent_item_colon'     => 'Dwukropek elementu nadrzędnego:',
        'edit_item'             => 'Edytuj nową kopiarkę',
        'update_item'           => 'Zaktualizuj nową kopiarkę',
        'add_new_item'          => 'Dodaj nową kopiarkę',
        'new_item_name'         => 'Nowa nazwa kopiarki',
        'menu_name'             => 'Nowe'
    );

    $args = array (
        'hierarchical'          => true,
        'labels'                => $labels,
        'show_ui'               => true,
        'show_admin_column'     => true,
        'show_in_rest'          => true,
        'query_var'             => true,
        'rewrite'               => array(
      'slug'                    => 'nowe',
      'with_front'              => false,
    )
    );
    register_taxonomy( 'nowe', array( 'kopiarki' ), $args );

这篇文章已被编辑多次,因为当时我没有有关该问题的所有信息。从那时起我就这个主题进行了广泛的研究。下面直接进入正题和答案。


我们这里有两个目标,将永久链接结构设置为以下内容
domain.com/_custom_post_type_/_taxonomy_/_term_/ ...

并得到taxonomy.php返回与自定义帖子类型的特定分类部分 a 相关的帖子和​​术语的索引,而不是404.php page.


“当访问者点击类别、标签或自定义的超链接时 分类法,WordPress 按时间倒序显示一页帖子 按该分类法过滤的顺序。”

来源: @https://developer.wordpress.org/themes/template-files-section/taxonomy-templates/

用于分类的默认模板是taxonomy.php。这些文件使您可以定位特定的分类法或特定的分类术语。例如:taxonomy-{taxonomy}-{term}.php and taxonomy-{taxonomy}.php

在你的情况下,当你搜索./fruits/apples您会收到与该术语相关的所有帖子apples要么显示在taxonomy.php or on taxonomy-fruits.php或终于taxonomy-fruits-aples.php。 但是如果你想访问怎么办./fruits/? 为什么获取水果会返回404.php error?嗯,因为taxonomy.php旨在显示针对术语的帖子,而不是针对分类法的帖子。这是正常且预期的行为.

这要追溯到10年前https://core.trac.wordpress.org/ticket/13816,并提出了多个问题。 (有趣的阅读,你应该看看)。

当您搜索时./fruits/apples/我们得到一个"true"但与./fruits/我们得到一个"false"考虑到这个逻辑,如果用户搜索./fruits/ or ./fruits他应该被重定向到包含所有相关内容的模板fruits帖子或条款,因为这不是默认行为,我想出了一个具体情况的解决方案:

<?php add_action( 'template_redirect', 'fallback_custom_taxonomy_fruits' );
function fallback_custom_taxonomy_fruits() {
  $url = $_SERVER[ 'REQUEST_URI' ];
  if ( ! is_tax( 'fruits' ) && substr( $url, -7 ) == '/fruits' || substr( $url, -8 ) == '/fruits/' ) {
    include( get_template_directory() . '/fruits.php' );
    exit();
  };
}; ?>

关于substr,值应与您的分类法别名等于破折号的字符数相匹配。substr( $url, -7 ) == '/fruits'

这可能不是最好的方法但它能完成工作,而且速度很快。我没有看到任何其他有效的解决方案(2020 年 9 月)。

Where fruits.php是您的后备模板,以防用户搜索./fruits/ or ./fruits。我们将 URL 的末尾与我们的自定义分类法 slug 进行匹配。这应该只发生在is_tax()是假的! is_tax( 'fruits' )并且 url 与我们的分类法相匹配。

现在假设我们的自定义分类法与称为“食谱”的自定义帖子类型相关联。然后,我们可以使用以下内容在后备中显示自定义帖子类型的帖子和相关术语fruit.php模板文件:

<?php
$custom_post_type = 'recipes';
$taxonomy = 'fruits';

$terms = get_terms( $taxonomy );
foreach ( $terms as $term ) {
wp_reset_query();
$args = array(
  'post_type' => $custom_post_type,
  'tax_query' => array(
  array(
    'taxonomy' => $taxonomy,
    'field' => 'slug',
    'terms' => $term->slug,
  ),
), );

$query = new WP_Query( $args );
if ( $query->have_posts() ) {
  echo $term->name.'<br/>';
  while ( $query->have_posts() ) : $query->the_post();
  echo '<a href="'.get_permalink().'">'.the_title().'</a><br>';
  endwhile;
};

}; ?>

此外,您还希望在您的永久链接中的分类法前面为您的自定义分类法提供自定义帖子类型(CPT),以获得如下结构:recipes/fruits/apples其中食谱是您的自定义帖子类型。您可以使用以下命令在注册该分类法的参数时使用重写规则:'rewrite' => array( 'slug' => 'recipes/fruits' ), hierarchical => true, ),.

add_action( 'init', 'custom_taxonomy_nowe' );
function custom_taxonomy_nowe() {
  $custom_post_type = 'Recipes';
  $singular = 'Fruit';
  $plural = 'Fruits';
  $labels = array(
    'name' => $plural,
    'singular_name' => $singular,
  );
  $args = array(
    'labels' => $labels,
    'hierarchical' => true,
    'rewrite' => array( 'slug' => strtolower( $custom_post_type.'/'.$plural ), 'hierarchical' => true, ),
  );
  register_taxonomy( strtolower( $plural ), strtolower( $custom_post_type ), $args );
};

我们的永久链接结构现在应该如下所示
domain.com/recipes/fruits/apples/ ...
domain.com/_custom_post_type_/_taxonomy_/_term_/ ...

分类页面现在可以用作帖子和分类索引。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我在尝试访问没有任何条款的taxonomy.php 页面时收到 404 错误(Wordpress 看不到分类页面) 的相关文章

随机推荐

  • 获取一个月内的工作日

    我正在尝试获取给定月份内的日期 我的计划是 获取给定月份的开始日期和结束日期 获取该范围内的所有日期 迭代它们并使用以下方法消除周末内的日期isDateInWeekend method 其余日期为工作日 所以我创建了两个NSDate扩展方法
  • groovy++ 发生了什么? [关闭]

    Closed 这个问题是无关 目前不接受答案 我刚刚偶然发现了 groovy 发现它非常有趣 不幸的是 它似乎没有进一步发展 根据 github 的说法 最后一次提交是一年多前 邮件列表完全不活跃 最后一条消息是在四月份返回的 最近没有这方
  • 如何从 XML 文档中删除所有文本

    如何删除所有文本 但保持结构完整 例如
  • 清除MySQL查询缓存而不重新启动服务器

    有什么办法可以clear mysql 查询缓存无需重新启动 mySQL 服务器 我相信你可以用 RESET QUERY CACHE 如果您运行的用户具有重新加载权限 或者 您可以通过以下方式对查询缓存进行碎片整理 FLUSH QUERY C
  • MySQL - 来自另一个表的总和

    我想运行一个包含另一个表中的总和的 select 语句 我知道我可能需要设置一个连接 但我不知道如何处理它 我想选择一个帐户列表 然后获取它们的余额 来自另一个表的总和 这是我一直以来的想法 但显然它是不正确的 SELECT account
  • 如何从 Android 应用程序将 db 文件上传到 google 驱动器?

    我想将数据库文件从我的应用程序上传到谷歌驱动器 我可以在谷歌驱动器中创建一个文件夹 但我不知道如何上传数据库文件 这是我的代码 import java io BufferedInputStream import java io Buffer
  • 使用 Gatsbyjs 包含本地 JS 和 CSS 文件

    我对这个完全陌生gatsbyjs生态系统 同时我正在学习一些reactjs 我最近购买了一个 html 模板 并尝试将其用作 UIgatsbyjs应用 该模板有很多 css 和 js 无论是专有的还是定制的 这意味着没有插件gatsbyjs
  • 添加对 Jtree 的拖放支持

    我想为我的 JTree 应用程序添加拖放支持 我创建了一个自定义的 DefaultMutableTreeNode 子类 有一个默认的 TreeCellRenderer 我需要添加哪些内容以及在哪里添加 最简单的方法是1 调用tree set
  • UIWebView 没有释放内存

    我在尝试恢复分配给 a 的内存时遇到了一些真正的麻烦UIWebView在我的应用程序中 我本质上是创造并呈现UIWebView暂时为用户单独ViewController 然后删除所有引用并弹出ViewController从堆栈中 尽管做了所
  • 如何使用 Lambda 函数对 Alexa Skill 应用程序进行异步 API 调用?

    我想从 Lambda 函数调用 api 我的处理程序由包含两个必需插槽的意图触发 因此我事先不知道我是否会退货Dialog Delegate指令或我对 api 请求的响应 在调用意图处理程序时 我如何承诺这些返回值 这是我的处理程序 con
  • 更新过期的 iO​​S MDM 配置文件

    因此 我设置了 SCEP 服务器来生成 iOS 身份证书 该证书仅在短时间内有效 当它过期时 配置文件会显示 此配置文件已过期 请更新此配置文件以获取更新版本 并显示 更新配置文件 按钮 然而 单击此按钮只会告诉我 无法更新配置文件 请联系
  • 查找非零元素的索引并按值分组

    我用 python 编写了一段代码 它接受 numpy 矩阵作为输入 并返回按相应值分组的索引列表 即 输出 3 返回值为 3 的所有索引 然而 我缺乏编写矢量化代码的知识 不得不使用 ndenumerate 来完成 这个操作只花了大约9秒
  • this.href 与 $(this).attr('href')

    读完这篇文章后net tutsplus com tutorials javascript ajax 14 helpful jquery tricks notes and best practices 我得出的结论是使用这个 href更有效率
  • Google 文档的 Apps 脚本 findText()

    我正在将正则表达式搜索应用于谷歌文档带有一些 Markdown 代码块刻度 的文本 在我的文档上运行下面的代码将返回空结果 var codeBlockRegEx 3 s 3 RegEx to find lazily all text bet
  • 如何使用 build-number 插件在 Maven 中显示 SVN 版本

    如何使用内部版本号插件显示 svn 版本和时间戳 目前我有以下内容
  • iPhone将彩色图像转换为2位图像(黑白)

    我需要帮助将彩色图像转换为 黑白 而不是灰度 我如何使用 iPhone SDK 和 Core Graphics 来做到这一点 因为我相信这是可能的 这是可能的 我之前尝试过两条路径 转换为灰度 然后逐像素转换为黑白 问题是我在透明图像上没有
  • 我应该绑定什么数据类型作为查询参数以与 Oracle ODBC 中的 NUMBER(15) 列一起使用?

    我刚刚被SO问题中描述的问题所困扰绑定 int64 SQL BIGINT 作为查询参数会导致在 Oracle 10g ODBC 中执行期间出错 我正在使用 ODBC 2 将 C C 应用程序从 SQL Server 移植到 Oracle 对
  • 从函数返回多个值

    UPDATE 这是 WIP 功能 我现在的疑问是 如何调用该函数 如
  • 实体框架在克隆后附加异常

    在尝试了几种拥有体面机制的选项之后 该机制允许使用 ObservableCollections 并可以选择使用编辑窗口和绑定动态更新它们 而无需在对绑定控件进行更改时更新全局集合 到目前为止 最好的解决方案似乎是be 克隆实体 分离旧实体
  • 为什么我在尝试访问没有任何条款的taxonomy.php 页面时收到 404 错误(Wordpress 看不到分类页面)

    我正在尝试创建分类页面 因此我使用分类法taxonomy nowe php 创建了分类法 但我的 WP 看不到该页面 或者我弄乱了重写 URL 有人可以检查我的代码并看看我是否做错了什么 我通过保存平原来刷新永久链接 然后返回到帖子名称永久