2

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?

9
  • What do you mean by "broken"? Permalink returns a 404 for pages only but not CPT or tax pages?
    – jdm2112
    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
    Dec 15, 2014 at 16:58
  • 1
    the simplest fix is to prefix your structure with something static
    – Milo
    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
    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 Dec 19, 2014 at 15:09

2 Answers 2

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' );
0

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.