最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Custom Taxonomy breaking pages permalinks

programmeradmin1浏览0评论

I'm stuck for some days with this problem and I don't know what else to do.

With %somethingHere% on slug rewrite, pages permalinks are broken (CPT AND CT OK).

Without, I don't have my desired Post structure but Pages permalinks are OK.

CPT and CT Creation

function custom_post_type() {

register_taxonomy(
    'marca',
    '',
    array(
        'label' => 'Marcas',
        'singular_label' => 'Marca',
        'hierarchical' => true,
        'query_var' => true
        //'rewrite' => array('slug' => 'relogios'),
        )
    );


$labels = array(
    'name'                => _x( 'Relogios', 'Post Type General Name', 'text_domain' ),
    'singular_name'       => _x( 'Relogio', 'Post Type Singular Name', 'text_domain' ),
    'menu_name'           => __( 'Relogios', 'text_domain' ),
    'parent_item_colon'   => __( 'Parent Item:', 'text_domain' ),
    'all_items'           => __( 'All Items', 'text_domain' ),
    'view_item'           => __( 'View Item', 'text_domain' ),
    'add_new_item'        => __( 'Add New Item', 'text_domain' ),
    'add_new'             => __( 'Add New', 'text_domain' ),
    'edit_item'           => __( 'Edit Item', 'text_domain' ),
    'update_item'         => __( 'Update Item', 'text_domain' ),
    'search_items'        => __( 'Search Item', 'text_domain' ),
    'not_found'           => __( 'Not found', 'text_domain' ),
    'not_found_in_trash'  => __( 'Not found in Trash', 'text_domain' ),
    );
$args = array(
    'label'               => __( 'relogios', 'text_domain' ),
    'description'         => __( 'Relogios', 'text_domain' ),
    'labels'              => $labels,
    'supports'            => array( 'title', 'editor', 'revisions', 'custom-fields', 'page-attributes', ),
    'taxonomies'          => array( 'post_tag' , 'marca'),
    'hierarchical'        => false,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'menu_position'       => 5,
    'can_export'          => true,
    'has_archive'         => false,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'rewrite' => array(
        //'slug' => 'event',
        'slug' => '%marca%/relogios',
        'with_front' => true
        ),
    'menu_icon'           => 'dashicons-clock',
    'capability_type'     => 'post',
    );
register_post_type( 'relogios', $args );


$labels_joias = array(
    'name'                => _x( 'Joias', 'Post Type General Name', 'text_domain' ),
    'singular_name'       => _x( 'Joia', 'Post Type Singular Name', 'text_domain' ),
    'menu_name'           => __( 'Joias', 'text_domain' ),
    'parent_item_colon'   => __( 'Parent Item:', 'text_domain' ),
    'all_items'           => __( 'All Items', 'text_domain' ),
    'view_item'           => __( 'View Item', 'text_domain' ),
    'add_new_item'        => __( 'Add New Item', 'text_domain' ),
    'add_new'             => __( 'Add New', 'text_domain' ),
    'edit_item'           => __( 'Edit Item', 'text_domain' ),
    'update_item'         => __( 'Update Item', 'text_domain' ),
    'search_items'        => __( 'Search Item', 'text_domain' ),
    'not_found'           => __( 'Not found', 'text_domain' ),
    'not_found_in_trash'  => __( 'Not found in Trash', 'text_domain' ),
    );
$args_joias = array(
    'label'               => __( 'joias', 'text_domain' ),
    'description'         => __( 'Joias', 'text_domain' ),
    'labels'              => $labels_joias,
    'supports'            => array( 'title', 'editor', 'revisions', 'custom-fields', 'page-attributes', ),
    'taxonomies'          => array('post_tag', 'marca' ),
    'hierarchical'        => false,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'menu_position'       => 5,
    'can_export'          => true,
    'has_archive'         => false,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'rewrite' => array(
        'slug' => '%marca%/joias',
        'with_front' => true
        ),
    'menu_icon'           => 'dashicons-clock',
    'capability_type'     => 'post',
    );
register_post_type( 'joias', $args_joias );
}
add_action( 'init', 'custom_post_type');

Post Link Filter

This is the function where I replace the general taxonomy name for the current taxonomy term.

add_filter('post_type_link', 'marca_permalink_structure');
function marca_permalink_structure($post_link, $post, $leavename, $sample)
{
    //if (is_page()) { return $post_link;}
    if ( false !== strpos( $post_link, '%marca%' ) ) {
        $event_type_term = get_the_terms( $post->ID, 'marca' );
        $post_link = str_replace( '%marca%', array_pop( $event_type_term )->slug, $post_link );
    }
    return $post_link;
}

Any ideas?

I'm stuck for some days with this problem and I don't know what else to do.

With %somethingHere% on slug rewrite, pages permalinks are broken (CPT AND CT OK).

Without, I don't have my desired Post structure but Pages permalinks are OK.

CPT and CT Creation

function custom_post_type() {

register_taxonomy(
    'marca',
    '',
    array(
        'label' => 'Marcas',
        'singular_label' => 'Marca',
        'hierarchical' => true,
        'query_var' => true
        //'rewrite' => array('slug' => 'relogios'),
        )
    );


$labels = array(
    'name'                => _x( 'Relogios', 'Post Type General Name', 'text_domain' ),
    'singular_name'       => _x( 'Relogio', 'Post Type Singular Name', 'text_domain' ),
    'menu_name'           => __( 'Relogios', 'text_domain' ),
    'parent_item_colon'   => __( 'Parent Item:', 'text_domain' ),
    'all_items'           => __( 'All Items', 'text_domain' ),
    'view_item'           => __( 'View Item', 'text_domain' ),
    'add_new_item'        => __( 'Add New Item', 'text_domain' ),
    'add_new'             => __( 'Add New', 'text_domain' ),
    'edit_item'           => __( 'Edit Item', 'text_domain' ),
    'update_item'         => __( 'Update Item', 'text_domain' ),
    'search_items'        => __( 'Search Item', 'text_domain' ),
    'not_found'           => __( 'Not found', 'text_domain' ),
    'not_found_in_trash'  => __( 'Not found in Trash', 'text_domain' ),
    );
$args = array(
    'label'               => __( 'relogios', 'text_domain' ),
    'description'         => __( 'Relogios', 'text_domain' ),
    'labels'              => $labels,
    'supports'            => array( 'title', 'editor', 'revisions', 'custom-fields', 'page-attributes', ),
    'taxonomies'          => array( 'post_tag' , 'marca'),
    'hierarchical'        => false,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'menu_position'       => 5,
    'can_export'          => true,
    'has_archive'         => false,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'rewrite' => array(
        //'slug' => 'event',
        'slug' => '%marca%/relogios',
        'with_front' => true
        ),
    'menu_icon'           => 'dashicons-clock',
    'capability_type'     => 'post',
    );
register_post_type( 'relogios', $args );


$labels_joias = array(
    'name'                => _x( 'Joias', 'Post Type General Name', 'text_domain' ),
    'singular_name'       => _x( 'Joia', 'Post Type Singular Name', 'text_domain' ),
    'menu_name'           => __( 'Joias', 'text_domain' ),
    'parent_item_colon'   => __( 'Parent Item:', 'text_domain' ),
    'all_items'           => __( 'All Items', 'text_domain' ),
    'view_item'           => __( 'View Item', 'text_domain' ),
    'add_new_item'        => __( 'Add New Item', 'text_domain' ),
    'add_new'             => __( 'Add New', 'text_domain' ),
    'edit_item'           => __( 'Edit Item', 'text_domain' ),
    'update_item'         => __( 'Update Item', 'text_domain' ),
    'search_items'        => __( 'Search Item', 'text_domain' ),
    'not_found'           => __( 'Not found', 'text_domain' ),
    'not_found_in_trash'  => __( 'Not found in Trash', 'text_domain' ),
    );
$args_joias = array(
    'label'               => __( 'joias', 'text_domain' ),
    'description'         => __( 'Joias', 'text_domain' ),
    'labels'              => $labels_joias,
    'supports'            => array( 'title', 'editor', 'revisions', 'custom-fields', 'page-attributes', ),
    'taxonomies'          => array('post_tag', 'marca' ),
    'hierarchical'        => false,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'menu_position'       => 5,
    'can_export'          => true,
    'has_archive'         => false,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'rewrite' => array(
        'slug' => '%marca%/joias',
        'with_front' => true
        ),
    'menu_icon'           => 'dashicons-clock',
    'capability_type'     => 'post',
    );
register_post_type( 'joias', $args_joias );
}
add_action( 'init', 'custom_post_type');

Post Link Filter

This is the function where I replace the general taxonomy name for the current taxonomy term.

add_filter('post_type_link', 'marca_permalink_structure');
function marca_permalink_structure($post_link, $post, $leavename, $sample)
{
    //if (is_page()) { return $post_link;}
    if ( false !== strpos( $post_link, '%marca%' ) ) {
        $event_type_term = get_the_terms( $post->ID, 'marca' );
        $post_link = str_replace( '%marca%', array_pop( $event_type_term )->slug, $post_link );
    }
    return $post_link;
}

Any ideas?

Share Improve this question edited Dec 24, 2014 at 12:55 shyammakwana.me 2691 silver badge10 bronze badges asked Dec 15, 2014 at 14:48 Mário CarvalhoMário Carvalho 714 bronze badges 9
  • What do you mean by "broken"? Permalink returns a 404 for pages only but not CPT or tax pages? – jdm2112 Commented Dec 15, 2014 at 16:25
  • 1 Have your tried re-saving your permalinks in your settings? Sometimes this has helped me when I've had issues with permalinks. Also check for plugin conflicts. – stemie Commented Dec 15, 2014 at 16:58
  • 1 the simplest fix is to prefix your structure with something static – Milo Commented Dec 15, 2014 at 17:00
  • 1 you'll either have to hook request parsing and somehow convert the requests to set the correct query vars, or disable rewrite in your post type registration and manually add the rewrite rules to handle your post types. also, always develop with debugging enabled, your code has some errors. – Milo Commented Dec 15, 2014 at 20:10
  • 1 Hey change 'has_archive' => true and then goto your admin settings->Permalinks and two times save the Permalink then i think it work fine – Amit Mishra Commented Dec 19, 2014 at 15:09
 |  Show 4 more comments

2 Answers 2

Reset to default 1

Can you provide a link to your site and a little more explanation on what you are trying to achieve?

Here's a shot in the dark guess.

Archives shows content of type 'post', but you can alter it to include custom post types. Add this filter to your functions.php file:

function namespace_add_custom_types( $query ) {
 if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
  $query->set( 'post_type', array(
   'post', 'nav_menu_item', 'your-custom-post-type-here'
      ));
    return $query;
  }
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' );

Im not sure what your asking, but I couldn't figure out how to format the permalinks for my custom post type and found this plugin which gives you some options for easy customization

Custom Post Type Permalinks

发布评论

评论列表(0)

  1. 暂无评论