目前正在建立一个自定义杂志网站,并遇到一些重写问题。
我使用的是默认的Posts post类型,并为issue(issue\\u cat)添加了自定义分类法。大多数情况下,一切都很好,但我正在努力使永久链接结构正确。我还将默认的“类别”用于文章的一般类别。
如果有必要,我还有一个带有slug“issues”的页面,它只是一个带有自定义页面模板的页面,显示了issue\\u cats分类法中术语的自定义布局。
查看所有问题的链接结构是:站点。com/问题/
个别问题的链接结构如下:站点。com/issues/issues name,效果很好。
问题在于单一岗位。理想的URL应该是:站点。com/issues/issues name/post name。
我尝试了几件事,在某些情况下,使单个帖子正常工作/具有正确的slug,但这会导致网站上所有常规页面返回404。谷歌搜索了几天,我想我在某一点上找到了解决方案,但从4.5.2开始显然不起作用。有什么想法吗?
以下是我的自定义问题分类代码:
function zbt_register_custom_tax() {
$labels = array(
\'name\' => \'Issue\',
\'singular_name\' => \'Issue\',
\'search_items\' => \'Search Issues\',
\'all_items\' => \'All Issues\',
\'parent_item\' => \'Parent Issue\',
\'parent_item_colon\' => \'Parent Issue\',
\'edit_item\' => \'Edit Issue\',
\'update_item\' => \'Update Issue\',
\'add_new_item\' => \'Add Issue\',
\'new_item_name\' => \'New Issue\',
\'menu_name\' => \'Issues\'
);
$args = array(
\'labels\' => $labels,
\'show_admin_column\' => true,
\'hierarchical\' => true,
\'rewrite\' => array( \'slug\' => \'issues\', \'with_front\' => false ),
\'show_ui\' => true,
\'query_var\' => true,
\'public\' => true,
);
register_taxonomy( \'issue_cats\', \'post\', $args );
}
add_action( \'init\', \'zbt_register_custom_tax\', 99 );
SO网友:61Pixels
这就是我们最终得出的似乎有效的结论。我不确定这是最好的还是正确的方法,但它似乎起到了作用。有人看到这条路线有什么问题吗?
//Re-register default post type for rewrite purposes.
function zbt_reregister_post() {
register_post_type( \'post\', array(
\'labels\' => array(
\'name_admin_bar\' => _x( \'Article\', \'add new on admin bar\' ),
),
\'public\' => true,
\'_builtin\' => false,
\'_edit_link\' => \'post.php?post=%d\',
\'capability_type\' => \'post\',
\'map_meta_cap\' => true,
\'hierarchical\' => false,
\'rewrite\' => array( \'slug\' => \'/issues/%issue_cats%\', \'with_front\' => false ),
\'query_var\' => false,
\'supports\' => array( \'title\', \'editor\', \'author\', \'excerpt\', \'comments\', \'revisions\'),
) );
}
add_action( \'init\', \'zbt_reregister_post\', 99 );
// Rewrite default post permalinks to add issue (e.g. /summer-2016/post-name/).
function zbt_add_issue_to_permalinks( $post_link, $post ){
if ( is_object( $post ) && $post->post_type == \'post\' ){
$terms = wp_get_object_terms( $post->ID, \'issue_cats\' );
if( $terms ){
return str_replace( \'%issue_cats%\' , $terms[0]->slug , $post_link );
}
}
return $post_link;
}
add_filter( \'post_type_link\', \'zbt_add_issue_to_permalinks\', 1, 2 );