自定义分类打破页面固定链接

时间:2014-12-15 作者:Mário Carvalho

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?

2 个回复
SO网友:9ete

你能提供一个到你的网站的链接,并对你想要实现的目标进行更多的解释吗?

这里有一个猜测。

归档文件显示“post”类型的内容,但您可以将其更改为包含自定义post类型。将此筛选器添加到函数中。php文件:

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

SO网友:Daniel

我不知道你在问什么,但我不知道如何为我的自定义帖子类型设置永久链接的格式,我找到了这个插件,它为你提供了一些易于自定义的选项

Custom Post Type Permalinks

结束