对于我的一种特定帖子类型,我尝试通过以下操作删除默认的永久链接结构:
add_filter('register_post_type_args', function($args, $post_type) {
if ('procedures' === $post_type ) {
$args['rewrite']['with_front'] = false;
}
return $args;
}, 99, 2);
哪个工作正常。然后,我还尝试使用以下命令从URL中删除帖子类型:
function remove_procedures_slug($post_link, $post, $leavename) {
if ($post->post_type != 'procedures' || $post->post_status != 'publish') {
return $post_link;
}
$post_link = str_replace('/' . $post->post_type . '/', '/', $post_link);
return $post_link;
}
add_filter('post_type_link', 'remove_procedures_slug', 10, 3);
function set_procedures_url($query) {
if(isset($query->query['post_type'])) {
return;
}
if (!empty($query->query['name'])) {
$query->set('post_type', array('post', 'procedures', 'page'));
}
}
add_action('pre_get_posts', 'set_procedures_url');
在删除register_post_type_args
过滤器时,此方法工作正常。如何将/ blog / procedures / page-1更改为/ page-1?
如果我做这样的事情:
if ('procedures' === $post_type && is_array($args)) {
$args['rewrite']['with_front'] = false;
$args['rewrite']['slug'] = '/';
}
可以,但是会删除存档页面。任何帮助将不胜感激。
答案 0 :(得分:0)
您能否使用is_post_type_archive()
检查当前请求是否是针对存档的?也许像下面这样:
if( 'procedures' === $post_type && is_array($args) && !is_post_type_archive('procedures') ){
$args['rewrite']['with_front'] = false;
$args['rewrite']['slug'] = '/';
}