我有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。我怎样才能修复它?
最合适的回答,由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 );