从自定义POST类型固定链接中删除POST_TYPE

时间:2019-07-02 作者:Ramesh

我有一个名为services 使用以下permalinkDOMAIN/services/investing/ (单页永久链接)。

我想把permalink改成DOMAIN/investing/. 我不想在永久链接中使用POST\\u类型。

我在中更新了永久链接设置WP Dashboad. 但它只更改为博客帖子,而不是自定义帖子类型。

如何自定义自定义帖子类型的永久链接?

POST\\u类型是使用register_post_type 如下所示。

function cp_services() {
  register_post_type(\'Services\', array(
    \'labels\' => array(
        \'name\' => \'Services\',
        \'singular_name\' => \'service\',
        \'add_new_item\' => \'Add New Service\',
        \'edit_item\' => \'Edit Service\',
    ),
    \'description\' => \'Services\',
    \'public\' => true,
    \'has_archive\' => true,
    \'menu_position\' => 20,
    \'show_in_menu\' => true,
    \'show_in_nav_menus\' => true,
    \'supports\' => array(\'title\',\'editor\',\'thumbnail\')
  ));
}

add_action(\'init\', \'cp_services\');

1 个回复
最合适的回答,由SO网友:Ramesh 整理而成

当@WebElaine对这个问题发表评论时,我尝试了以下对我有用的代码。

首先,从permalink中取出段塞

function na_remove_slug( $post_link, $post, $leavename ) {

  if ( \'services\' != $post->post_type || \'publish\' != $post->post_status ) {
      return $post_link;
  }

  $post_link = str_replace( \'/\' . $post->post_type . \'/\', \'/\', $post_link );

  return $post_link;
}

add_filter( \'post_type_link\', \'na_remove_slug\', 10, 3 );
仅仅去掉鼻涕虫是不够的。现在,您将得到404页,因为WordPress只希望帖子和页面以这种方式运行。您还需要添加以下内容:

function na_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\', \'services\', \'page\' ) );
  }
}

add_action( \'pre_get_posts\', \'na_parse_request\' );
然后刷新永久链接。