将类别添加到永久链接时,WordPress CPT 会导致 404

Posted

技术标签:

【中文标题】将类别添加到永久链接时,WordPress CPT 会导致 404【英文标题】:WordPress CPT causing 404s when categories are added to permalinks 【发布时间】:2021-12-31 12:16:42 【问题描述】:

我为运行良好的画廊创建了自定义帖子类型 (CPT) 和分类法。

问题在于当我将 /%category%/ 添加到永久链接结构时,非 CPT 帖子的永久链接会变为 404。

在 (1) 我从 functions.php 中删除自定义分类法,或 (2) 当我从永久链接中删除 /%category%/ 时,永久链接有效。因此我知道问题出在functions.php 中的CPT 或/和分类代码上,但我看不到问题所在。非常感谢您的帮助。

/* Custom Post Type - Gallery */
add_action( 'init', 'add_gallery_post_type' );
function add_gallery_post_type() 
    register_post_type(
        'zm_gallery',
        array(
            'labels'             => array(
                'name'          => __( 'The Gallery' ),
                'singular_name' => __( 'The Gallery' ),
                'add_new_item'  => __( 'Add New Photograph' ),
                'all_items'     => __( 'All Images' ),
            ),
            'public'             => true,
            'has_archive'        => true,
            'rewrite'            => array( 'slug' => 'gallery-item' ),
            'supports'           => array( 'title' ),
            'menu_position'      => 4,
            'publicly_queryable' => true,
            'show_ui'            => true,
            'show_in_menu'       => true,
            'query_var'          => true,
            'menu_icon'          => 'dashicons-camera',
            'capability_type'    => 'post',

        )
    );



/* Gallery Taxonomies */

function be_register_taxonomies() 

    $taxonomies = array(
        array(
            'slug'        => 'location',
            'single_name' => 'Location',
            'plural_name' => 'Locations',
            'post_type'   => 'zm_gallery',
        ),
        array(
            'slug'        => 'circa',
            'single_name' => 'Circa',
            'plural_name' => 'Circas',
            'post_type'   => 'zm_gallery',
        ),
        array(
            'slug'        => 'era',
            'single_name' => 'Era',
            'plural_name' => 'Era',
            'post_type'   => 'zm_gallery',
        ),
    );

    foreach ( $taxonomies as $taxonomy ) 
        $labels = array(
            'name'              => $taxonomy['plural_name'],
            'singular_name'     => $taxonomy['single_name'],
            'search_items'      => 'Search ' . $taxonomy['plural_name'],
            'all_items'         => 'All ' . $taxonomy['plural_name'],
            'parent_item'       => 'Parent ' . $taxonomy['single_name'],
            'parent_item_colon' => 'Parent ' . $taxonomy['single_name'] . ':',
            'edit_item'         => 'Edit ' . $taxonomy['single_name'],
            'update_item'       => 'Update ' . $taxonomy['single_name'],
            'add_new_item'      => 'Add New ' . $taxonomy['single_name'],
            'new_item_name'     => 'New ' . $taxonomy['single_name'] . ' Name',
            'menu_name'         => $taxonomy['plural_name'],
        );

        $rewrite      = isset( $taxonomy['rewrite'] ) ? $taxonomy['rewrite'] : array( 'slug' => $taxonomy['slug'] );
        $hierarchical = isset( $taxonomy['hierarchical'] ) ? $taxonomy['hierarchical'] : true;

        register_taxonomy(
            $taxonomy['slug'],
            $taxonomy['post_type'],
            array(
                'hierarchical' => $hierarchical,
                'labels'       => $labels,
                'show_ui'      => true,
                'query_var'    => true,
                'rewrite'      => $rewrite,
            )
        );
    



add_action( 'init', 'be_register_taxonomies' );

【问题讨论】:

我测试了你的代码,没有发现问题。添加自定义帖子类型后,您是否保存了永久链接? 为了测试,我尝试了一些东西或关闭了一些东西等,然后我将永久链接更改为普通链接,然后返回自定义 /%category%/%postname%/,然后再试一次。如果我不将 /%category%/ 放在永久链接中,它将起作用。 【参考方案1】:

好的。我的错。问题是帖子的主要默认类别设置为“常规”。当我创建 CPT 时,我还创建了一个名为“General”的类别。 WordPress变得困惑。我将主要帖子类别重命名为“新闻”,现在一切正常。

【讨论】:

以上是关于将类别添加到永久链接时,WordPress CPT 会导致 404的主要内容,如果未能解决你的问题,请参考以下文章

如何将“项目”永久链接更改为 Wordpress 中帖子的类别

如何获取在 Wordpress 中按类别过滤的自定义帖子类型的永久链接?

永久链接不适用于自定义帖子和类别

php 注册CPT的自定义分类。这允许Wordpress仅为CPT分配类别,然后您可以显示这些类别。

子页面的 Wordpress 自定义永久链接

从存档调用的 CPT 页面上的 Wordpress 上一个和下一个链接