CPT and rewrite rules

时间:2019-12-01 作者:Karolína Vyskočilová

我有CPT“Library”和“Library category”分类法。

我想要实现的是:

我的主要工作是:

register_post_type(
    \'library\',
    array(
        \'label\'               => __( \'Library\', \'my-theme\' ),
        \'description\'         => __( \'Library\', \'my-theme\' ),
        \'labels\'              => array(
            \'name\'           => _x( \'Library\', \'Post Type General Name\', \'my-theme\' ),
            \'singular_name\'  => _x( \'Library item\', \'Post Type Singular Name\', \'my-theme\' ),
            \'menu_name\'      => __( \'Library\', \'my-theme\' ),
            \'name_admin_bar\' => __( \'Library item\', \'my-theme\' ),
            \'add_new_item\'   => __( \'Create New Library item\', \'my-theme\' ),
            \'add_new\'        => __( \'Add Library item\', \'my-theme\' ),
        ),
        \'supports\'            => array( \'title\', \'editor\', \'excerpt\', \'revisions\', \'thumbnail\' ),
        \'hierarchical\'        => true,
        \'public\'              => true,
        \'show_ui\'             => true,
        \'show_in_menu\'        => true,
        \'menu_position\'       => 11,
        \'menu_icon\'           => \'dashicons-analytics\',
        \'show_in_admin_bar\'   => true,
        \'show_in_nav_menus\'   => true,
        \'can_export\'          => true,
        \'has_archive\'         => true,
        \'rewrite\'             => array(
            \'slug\'       => \'library/%library-category%\',
            \'with_front\' => false,
        ),
        \'exclude_from_search\' => false,
        \'publicly_queryable\'  => true,
        \'capability_type\'     => \'page\',
        \'show_in_rest\'        => true,
    )
);

register_taxonomy(
    \'library-category\',
    array( \'library\' ),
    array(
        \'labels\'            => array(
            \'name\'          => _x( \'Categories\', \'Taxonomy General Name\', \'my-theme\' ),
            \'singular_name\' => _x( \'Category\', \'Taxonomy Singular Name\', \'my-theme\' ),
        ),
        \'hierarchical\'      => true,
        \'public\'            => true,
        \'show_ui\'           => true,
        \'show_admin_column\' => true,
        \'show_in_nav_menus\' => true,
        \'show_tagcloud\'     => false,
        \'show_in_rest\'      => true,
        \'rewrite\'             => array(
            \'slug\'       => \'library/%library-category%/\',
            \'with_front\' => false,
        ),
    )
);
然而https://example.com/library 不工作,返回404。我怎样才能修复它?

1 个回复
最合适的回答,由SO网友:Karolína Vyskočilová 整理而成

最后,找到了解决方案组合:

CPT必须具备:

 \'has_archive\'         => \'library\', // Fixes the archive URL.
 \'rewrite\'             => array(
    \'slug\'       => \'library/%library-category%\',
    \'with_front\' => false,
 )
分类应如下所示:

\'rewrite\'        => array(
    \'slug\'       => \'library\',
    \'with_front\' => false,
),
然后您需要重写链接:

/**
 * Custom rewrite rules for URL
 *
 * @param string  $post_link Post link url.
 * @param integer $id Post ID.
 * @return string
 */
function getmanta_technologies_post_link( $post_link, $id = 0 ) {
    $post = get_post( $id );
    if ( is_object( $post ) ) {     
        $terms_lc = wp_get_object_terms( $post->ID, \'library-category\' );
        if ( $terms_lc ) {
            return str_replace( \'%library-category%\', $terms_lc[0]->slug, $post_link );
        }
    }
    return $post_link;
}
add_filter( \'post_type_link\', \'getmanta_technologies_post_link\', 1, 3 );

相关推荐

Problem with permalinks

我已经更改了类别的基本名称,现在它是“博客”,工作正常。但当我通过/blog/%category%/%postname%/更改结构时。显示404。如果我删除结构中的blog,它会再次工作,但我想使用blog word。问题出在哪里?非常感谢。