CPT中的自定义网址结构不起作用

时间:2018-05-29 06:36:27

标签: wordpress custom-post-type custom-taxonomy

我必须拥有以下网址结构:http://url.pl/custompostype/taxonomy/singlepost 我有这样的,但我也有404 page instead of post or list of posts。我知道有一个非常受欢迎的问题,但谷歌的所有提示都不适用于我:(我认为,我必须将'with_front'更改为false并且它应该有效?我更改了很多参数以多种方式仍然无效。

这是我的代码:

function learning() {

$labels = array(
    'name'                  => _x( 'Myposttype', 'Post Type General Name', 'text_domain' ),
    'singular_name'         => _x( 'Myposttype', 'Post Type Singular Name', 'text_domain' ),
    'menu_name'             => __( 'Myposttype', 'text_domain' ),
    'name_admin_bar'        => __( 'Myposttype', 'text_domain' ),
    'archives'              => __( 'Archiwa', 'text_domain' ),
    'attributes'            => __( 'Atrybuty', 'text_domain' ),
    'parent_item_colon'     => __( 'Parent Item:', 'text_domain' ),
    'all_items'             => __( 'Wszystkie', 'text_domain' ),
    'add_new_item'          => __( 'Dodaj nowy post', 'text_domain' ),
    'add_new'               => __( 'Dodaj nowy', 'text_domain' ),
    'new_item'              => __( 'Nowy', 'text_domain' ),
    'edit_item'             => __( 'Edytuj', 'text_domain' ),
    'update_item'           => __( 'Zaktualizuj', 'text_domain' ),
    'view_item'             => __( 'Zobacz', 'text_domain' ),
    'view_items'            => __( 'Zobacz', 'text_domain' ),
    'search_items'          => __( 'Szukaj', 'text_domain' ),
    'featured_image'        => __( 'Obrazek wyróżniający', 'text_domain' ),
    'set_featured_image'    => __( 'Ustaw obrazek wyróżniający', 'text_domain' ),
    'remove_featured_image' => __( 'Usuń obrazek', 'text_domain' ),
);
$args = array(
    'label'                 => __( 'Myposttype', 'text_domain' ),
    'labels'                => $labels,
    'supports'              => array( 'title', 'editor', 'thumbnail', 'page-attributes' ),
    'taxonomies'            => array( 'customtaxonomy'),
    'hierarchical'          => true,
    'public'                => true,
    'show_ui'               => true,
    'show_in_menu'          => true,
    'menu_position'         => 5,
    'menu_icon'             => 'dashicons-format-chat',
    'show_in_admin_bar'     => true,
    'show_in_nav_menus'     => true,
    'can_export'            => true,
    'has_archive'           => true,
    'exclude_from_search'   => false,
    'publicly_queryable'    => true,
    'capability_type'       => 'post',
    'rewrite'   => array('with_front' => false ),
);
register_post_type( 'myposttype', $args );
}
add_action( 'init', 'learning', 0 );


// Register Custom Taxonomy
function myposttype2() {

$labels = array(
    'name'                       => _x( 'CustomTaxonomy', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'              => _x( 'CustomTaxonomy', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                  => __( 'CustomTaxonomy', 'text_domain' ),
    'all_items'                  => __( 'Wszystkie', 'text_domain' ),
    'new_item_name'              => __( 'Dodaj nowy', 'text_domain' ),
    'add_new_item'               => __( 'Dodaj nowy', 'text_domain' ),
    'edit_item'                  => __( 'Edytuj', 'text_domain' ),
    'update_item'                => __( 'Zaktualizuj', 'text_domain' ),
    'view_item'                  => __( 'Zobacz', 'text_domain' ),
    'separate_items_with_commas' => __( 'Oddziel kolejne tagi przecinkami', 'text_domain' ),
    'choose_from_most_used'      => __( 'Wybierz spośród popularnych', 'text_domain' ),

);
$rewrite = array(
    'slug'                       => 'myposttype/customtaxonomy',
    'with_front'                 => false,
    'hierarchical'               => true,
    //'has_archive' => 'myposttype',
);
$args = array(
    'labels'                     => $labels,
    'hierarchical'               => true,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => true,
    'rewrite'                    => $rewrite,
);
register_taxonomy( 'customtaxonomy', array( 'myposttype' ), $args );

}
add_action( 'init', 'myposttype2', 0 );

2 个答案:

答案 0 :(得分:1)

请执行一项操作管理信息中心,Setting->Permalinks将永久链接更改为plainsave

再次将永久链接更改为Post Name并保存。

它将解决404问题。

答案 1 :(得分:0)

休息固定链接并确保在网站的任何位置都不使用相同的自定义帖子类型slug,这也可能会产生问题。

使用以下方式在网址中添加自定义分类。

使用以下更改自定义帖子类型重写数组项 'rewrite' => array('slug' => '%customtaxonomy%', 'with_front' => false ),

然后在主题的functions.php文件中添加以下过滤器。

 function d_reset_permlinks( $post_link, $post ){
    if ( is_object( $post ) && $post->post_type == 'myposttype' ){
    $terms = wp_get_object_terms( $post->ID, 'customtaxonomy' );
    if( $terms ){
        return str_replace( '%customtaxonomy%' , $terms[0]->slug , $post_link );
     }
   }
    return $post_link;
}
 add_filter( 'post_type_link', 'd_reset_permlinks', 1, 2 );

现在重置permlinks它会起作用。你可以在我的本地系统中看到它的味道http://prntscr.com/jnxvyo