我希望我的自定义帖子类型products不要使用slug,例如:domain。com/产品名称。下面的代码很好地解决了这一问题,但它无法处理子页面,例如:域。com/产品名称/产品名称功能,it 404s。
我最初尝试将自定义帖子类型的重写段标为“/”,虽然这对自定义帖子类型很好,但它杀死了普通页面(404)。因此,如果解决方案是使用“/”,然后修复普通页面,也可以。
// Post Type
function base_types() {
$labels = array(
\'name\' => \'Products & Features\',
\'singular_name\' => \'Product\',
\'add_new\' => \'Add New\',
\'add_new_item\' => \'Add New Product / Feature\',
\'edit_item\' => \'Edit Product\',
\'new_item\' => \'New Product\',
\'all_items\' => \'All\',
\'view_item\' => \'View Product / Feature\',
\'search_items\' => \'Search Product / Feature\',
\'not_found\' => \'None found\',
\'not_found_in_trash\' => \'None found in Trash\',
\'parent_item_colon\' => \'\',
\'menu_name\' => \'Products / Features\'
);
$args = array(
\'labels\' => $labels,
\'public\' => true,
\'publicly_queryable\' => true,
\'show_ui\' => true,
\'show_in_menu\' => true,
\'query_var\' => true,
\'rewrite\' => array( \'slug\' => \'product\', \'with_front\' => false ),
\'capability_type\' => \'page\',
\'has_archive\' => false,
\'hierarchical\' => true,
\'menu_position\' => 10,
\'with_front\' => false,
\'menu_icon\' => \'dashicons-chart-bar\',
\'supports\' => array( \'title\', \'editor\', \'author\', \'page-attributes\' )
);
register_post_type( \'product\', $args );
}
add_action( \'init\', \'base_types\' );
// Rewrites
function remove_slug( $post_link, $post, $leavename ) {
if ( \'product\' != $post->post_type || \'publish\' != $post->post_status ) {
return $post_link;
}
if( $post->post_parent ) {
$parent = get_post($post->post_parent);
$post_link = str_replace( \'/\' . $post->post_type . \'/\' . $parent->post_name . \'/\', \'/\' . $parent->post_name . \'/\', $post_link );
}
else {
$post_link = str_replace( \'/\' . $post->post_type . \'/\', \'/\', $post_link );
}
return $post_link;
}
add_filter( \'post_type_link\', \'remove_slug\', 10, 3 );
function parse_request( $query ) {
if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query[\'page\'] ) ) {
return;
}
if ( ! empty( $query->query[\'name\'] ) ) {
$query->set( \'post_type\', array( \'post\', \'product\', \'page\' ) );
}
}
add_action( \'pre_get_posts\', \'parse_request\' );
第一级页面按预期工作。子页面获得了正确的永久链接,但它们是404。有人能帮忙或指出正确的方向吗?非常感谢。