WordPress的自定义文章类型重写页面和类别塞
问题描述:
我已经建立了一个自定义后类型WordPress的自定义文章类型重写页面和类别塞
register_post_type('Communities',
array(
'labels' => array(
'name' => __('Communities'),
'singular_name' => __('Community'),
'not_found' => __('No Communities Found')
),
'public' => true,
'rewrite' => array('slug' => '/%category%/communities', 'with_front' => false),
'has_archive' => true,
'hierarchical' => true,
'taxonomies' => array('category'),
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'menu_icon' => 'dashicons-admin-home'
)
);
我有一个城市名称的页面设置,我需要保持对于不同原因的页面,但我想要将该城市的社区作为自定义帖子类型进行存储。我为每个要添加社区的城市设置类别,但我希望他们将城市名称页面作为父级。
这样
www.sitename.com/cityname/communities/communityname/
我想城市名是一个网页,社区是一个存档页面和团体名是一个单一页面。
到目前为止,我发现的每个解决方案都会生成404个错误或与父页面发生冲突。
任何帮助表示赞赏。谢谢!
答
这应该为你做,但首先有两件事你应该知道。
1.)我不会推荐这个URL结构,因为它要求每个条目至少有一个类别。它将始终抓住阵列中的第一个。你需要写一个小插件让你的作者知道。这可能做的伎俩:
https://srd.wordpress.org/plugins/require-post-category/
2),然后才能查看信息时,您需要访问设置>后,您的固定链接添加代码,以便它会迫使重写齐平。
/**
* Register Community Custom Post Type
*/
function community_post_type() {
$labels = array(
'name' => 'Communities',
'singular_name' => 'Community',
'menu_name' => 'Communities',
'name_admin_bar' => 'Communities',
'archives' => 'Community Archives',
'attributes' => 'Community Attributes',
'parent_item_colon' => 'Parent Community:',
'all_items' => 'All Communities',
'add_new_item' => 'Add New Community',
'add_new' => 'Add New',
'new_item' => 'New Community',
'edit_item' => 'Edit Community',
'update_item' => 'Update Community',
'view_item' => 'View Community',
'view_items' => 'View Communities',
'search_items' => 'Search Communities',
'not_found' => 'Community Not found',
'not_found_in_trash' => 'Not found in Trash',
'featured_image' => 'Featured Image',
'set_featured_image' => 'Set featured image',
'remove_featured_image' => 'Remove featured image',
'use_featured_image' => 'Use as featured image',
'insert_into_item' => 'Insert into item',
'uploaded_to_this_item' => 'Uploaded to this Community',
'items_list' => 'Communities list',
'items_list_navigation' => 'Communities list navigation',
'filter_items_list' => 'Filter Communities list',
);
$rewrite = array(
'slug' => '/%category%/communities',
'with_front' => true,
'pages' => true,
'feeds' => true,
);
$args = array(
'label' => 'Community',
'labels' => $labels,
'supports' => array('title', 'editor', 'excerpt', 'thumbnail', 'custom-fields',),
'taxonomies' => array('category'),
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-universal-access',
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'rewrite' => $rewrite,
'capability_type' => 'page',
'show_in_rest' => true,
);
register_post_type('communities', $args);
}
add_action('init', 'community_post_type', 0);
/**
* Add category slug to community post links
* @param $post_link
* @param $id
*/
function my_commmunity_post_link($post_link, $id = 0){
$post = get_post($id);
if (is_object($post) && $post->post_type == 'communities'){
$terms = wp_get_object_terms($post->ID, 'category');
if(!empty($terms)){
return str_replace('%category%' , $terms[0]->slug , $post_link);
}
}
return $post_link;
}
add_filter('post_type_link', 'my_commmunity_post_link', 1, 3);
感谢您的帮助迄今。我使用了上面的代码,并在我的自定义主题以及二十十六进行了测试。它适用于归档和单页,但父页面显示为归档。另外其他页面(即联系页面等)现在正在生成404错误。 –
它几乎就在那里......你有什么建议可以尝试吗? –
这解决了404问题,但我仍然认为可以将结构设置得更干净一些。也许是一种自定义分类法,而不是使用帖子的分类法。然后你可以使用ACF来形成关系。请参阅下面的更新,因为它会告诉你如何改写你的规则,你觉得合适。 https://gist.github.com/simplethemes/c9813cafef799000b04439ffae4a5c50 – simplethemes