WordPress自定义帖子-删除基础子弹

时间:2018-06-20 02:48:11

标签: wordpress

我希望自定义帖子的网址为:website.com/post-name;

我具有创建自定义帖子类型的功能:

function create_posttype() {
register_post_type( 'credit-cards',
    array(
      'labels' => array(
        'name' => __( 'Credit Cards' ),
        'singular_name' => __( 'credit_cards' )
      ),
      'public' => true,
      'has_archive' => true,
      'rewrite' => array('slug' => 'credit-cards','with_front' => false),
      'taxonomies' => array('category', 'post_tag'),
      'supports' => array( 'title', 'editor', 'custom-fields', 'excerpt' )
    )
  );
}
add_action( 'init', 'create_posttype' );

我期望'with_front' => false会从网址中隐藏credit-cards。 由于某些原因,这不会影响我的网址。

如何从{中隐藏credit-cards

1 个答案:

答案 0 :(得分:1)

请使用过滤器(post_type_link)从URL中删除自定义帖子类型的基本信息。将此代码放入functions.php文件中。

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

    if ( 'custom_post_type' != $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', 'remove_base_slug', 10, 3 );

如果收到404错误,则您也应该在functions.php中使用此脚本。

function check_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', 'custom_post_type', 'page' ) );
        }
    }
    add_action( 'pre_get_posts', 'check_parse_request' );

注意custom_post_type可以是bookseventsblogs