2017-05-27 70 views
1

所以基本上我一直在試圖讓我的永久鏈接看起來像這樣:製作自定義文章類型分層固定鏈接平板

/食譜/帖子ID/postname

而不是什麼有可能成爲這個潛力:

/食譜/ postparent/postparent/postparent/postparent/postname

用戶必須創建前端是其他職位的孩子職位的能力。這可以繼續下去,我不希望永久鏈接變得瘋狂。

我能夠使用下面的代碼從永久鏈接中刪除所有父郵件名。但是,如果某人創建了一個已存在的帖子名稱,則這不起作用。

我想能夠更改固定鏈接以包含帖子ID,所以這不會發生,但我無法弄清楚。我感謝任何幫助!

下面是代碼:

function Recipes() { 

$labels = array(
'name'     => _x('Recipes', 'Post Type Recipes', 'recipes'), 
'singular_name'   => _x('Recipe', 'Post Type Singular Name', 'Recipe'), 
'menu_name'    => __('Recipes', 'recipes'), 
'name_admin_bar'  => __('Recipes', 'recipes'), 
'archives'    => __('Recipes Archives', 'recipes'), 
'parent_item_colon'  => __('Parent Recipe', 'recipes'), 
'all_items'    => __('All Recipes', 'recipes'), 
'add_new_item'   => __('Add New Recipe', 'recipes'), 
'add_new'    => __('Add Recipe', 'recipes'), 
'new_item'    => __('New Recipe', 'recipes'), 
'edit_item'    => __('Edit Recipe', 'recipes'), 
'update_item'   => __('Update Recipe', 'recipes'), 
'view_item'    => __('View Recipe', 'recipes'), 
'search_items'   => __('Search Recipes', 'recipes'), 
); 
$args = array(
'label'     => __('Recipes', 'Recipes'), 
'description'   => __('Recipes', 'recipes'), 
'labels'    => $labels, 
'supports' => array(
    'title', 
    'thumbnail', 
    'comments', 
    'editor', 
    'revisions'), 
'taxonomies'   => array('category', 'recipes-tag'), 
'hierarchical'   => true, 
'public'    => true, 
'show_ui'    => true, 
'show_in_menu'   => true, 
'menu_position'   => 5, 
'menu_icon'   => 'dashicons-editor-ul', 
'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'  => 'page', 
'show_in_rest'  => true, 
'rest_controller_class' => 'WP_REST_Posts_Controller', 
'rewrite'    => array('slug' => 'recipes'), 

); 
register_post_type('recipes', $args); 

add_rewrite_rule(
     '^recipes/([^/]+)/?$', 
     'index.php?post_type=recipes&name=$matches[1]', 
     'top' 
    ); 

} 

add_action('init', 'Recipes', 0); 


function bvt_recipes_flatten_hierarchies($post_link, $post) { 
    if ('recipes' != $post->post_type) { 
     return $post_link; 
    } 
    $uri = ''; 
    foreach ($post->ancestors as $parent) { 
     $uri = get_post($parent)->post_name . "/" . $uri; 
    } 

    return str_replace($uri, '', $post_link); 
} 
add_filter('post_type_link', 'bvt_recipes_flatten_hierarchies', 10, 2); 

回答

0

UPDATE

我想通了。如果有其他人遇到這個問題,以下是這些變化。

function Recipes() { 

$labels = array(
'name'     => _x('Recipes', 'Post Type Recipes', 'recipes'), 
'singular_name'   => _x('Recipe', 'Post Type Singular Name', 'Recipe'), 
'menu_name'    => __('Recipes', 'recipes'), 
'name_admin_bar'  => __('Recipes', 'recipes'), 
'archives'    => __('Recipes Archives', 'recipes'), 
'parent_item_colon'  => __('Parent Recipe', 'recipes'), 
'all_items'    => __('All Recipes', 'recipes'), 
'add_new_item'   => __('Add New Recipe', 'recipes'), 
'add_new'    => __('Add Recipe', 'recipes'), 
'new_item'    => __('New Recipe', 'recipes'), 
'edit_item'    => __('Edit Recipe', 'recipes'), 
'update_item'   => __('Update Recipe', 'recipes'), 
'view_item'    => __('View Recipe', 'recipes'), 
'search_items'   => __('Search Recipes', 'recipes'), 
); 
$args = array(
'label'     => __('Recipes', 'Recipes'), 
'description'   => __('Recipes', 'recipes'), 
'labels'    => $labels, 
'supports' => array(
    'title', 
    'thumbnail', 
    'comments', 
    'editor', 
    'revisions'), 
'taxonomies'   => array('category', 'recipes-tag'), 
'hierarchical'   => true, 
'public'    => true, 
'show_ui'    => true, 
'show_in_menu'   => true, 
'menu_position'   => 5, 
'menu_icon'   => 'dashicons-editor-ul', 
'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'  => 'page', 
'show_in_rest'  => true, 
'rest_controller_class' => 'WP_REST_Posts_Controller', 
// 'rewrite'    => array('slug' => 'recipes'), 

); 
register_post_type('recipes', $args); 

add_rewrite_rule(
     'recipes/([a-z-]+)/([0-9]+)?$', 
     'index.php?post_type=recipes&name=$matches[1]&p=$matches[2]', 
     'top'); 

} 

add_action('init', 'Recipes', 0); 



function change_post_type_link($link, $post = 0){ 
    if ($post->post_type == 'recipes'){ 
     return home_url('recipes/'. $post->post_name .'/'. $post->ID); 
    } else { 
     return $link; 
    } 
} 


add_filter('post_type_link', 'change_post_type_link', 10, 2); 
相關問題