WP:将with_front设置为false并删除帖子类型

时间:2018-08-14 20:45:32

标签: wordpress url url-rewriting

对于我的一种特定帖子类型,我尝试通过以下操作删除默认的永久链接结构:

 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'] = '/';
}

可以,但是会删除存档页面。任何帮助将不胜感激。

1 个答案:

答案 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'] = '/';
}