What I Have Set Up
我有三种自定义帖子类型,它们分别命名为“品牌”、“职业”和“新闻”
我有三个页面模板,它们分别命名为“页面品牌”、“页面职业”和“页面新闻”
我使用这些模板创建的页面会查询同名的自定义帖子(即,我的“新闻”页面列出了所有“新闻”自定义帖子)。
我的自定义帖子类型主要是“品牌”、“职业”和“新闻”。
“我的网页”的URL为:
www.example.com/our-brands/
www.example.com/our-careers/
www.example.com/our-news/
我给这些页面添加了这些slug,因为我知道这些页面本身不能有与自定义帖子类型相同的slug,否则WordPress会感到困惑,并开始给出404个错误。
My Issue
我的页面的永久链接可以工作,我的自定义帖子的永久链接也可以工作,但我无法让我的面包屑获得正确的父页面URL。
例如:如果您要访问www.example.com/our-news/
然后单击此处列出的“新闻”帖子,生成的URL将是www.example.com/news/example-news-custom-post/
.
因此,我的面包屑显示为“主页»新闻»示例新闻自定义帖子”。如果有人想使用面包屑导航回来,并点击“新闻”链接,他们会得到404错误,因为www.example.com/news/
不存在。
What I Have Tried
我试图通过更改rewrite参数(注册帖子类型时可用)来解决这个问题,以便rewrite slug与我创建的页面的url相匹配。
\'rewrite\' => array(
\'slug\' => \'our-news\',
\'with_front\' => true,
\'pages\' => true,
\'feeds\' => true,
),
当然,这不起作用,因为WordPress现在很混乱,我的“新闻”页面开始出现404错误。
接下来,我尝试创建一个元框,为我的自定义帖子类型提供一个父页面,使用我创建的页面ID将它们指定为自定义帖子的父页面。
function rmm_add_meta_box() {
$screens = array( \'brands\', \'news\' , \'careers\');
foreach ( $screens as $screen ) {
add_meta_box(
\'custom_post_parent\',
\'Enter Post Parent ID\',
\'rmm_add_meta_callback\',
$screen,
\'side\'
);
}
}
add_action( \'add_meta_boxes\' , \'rmm_add_meta_box\' );
function rmm_add_meta_callback( $post ) {
wp_nonce_field( basename( __FILE__ ), \'rmm_meta_nonce\');
$custom_post_id = get_post_custom($post->ID);
$parent_id = $custom_post_id[\'parent_id\'][0];
$rmm_stored_meta = get_post_meta( $custom_post_id );
?>
<input type="text" id="parent_id" name="parent_id" value="<?php if ( ! empty( $rmm_stored_meta[\'parent_id\'] ) ) echo esc_attr( $rmm_stored_meta[\'parent_id\'][0] ) ; ?>" />
<?php
}
function rmm_meta_save( $post ){
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$is_valid_nonce = ( isset( $_POST[ \'rmm_meta_nonce\' ] ) && wp_verify_nonce( $_POST[ \'rmm_meta_nonce\' ], basename( __FILE__) ) ) ? \'true\' : \'false\';
if ( $is_autosave || $is_revision || !$is_valid_nonce){
return;
}
$data = sanitize_text_field( $_POST[\'parent_id\'] );
if ( isset( $_POST[\'parent_id\'] ) ) {
update_post_meta($post_id, \'parent_id\', $data);
}
}
add_action( \'save_post\', \'rmm_meta_save\');
这导致了“我们的新闻”这一段被钉在“新闻”这一段上。换句话说:
www.example.com/news/example-news-custom-post/
简直成了
www.example.com/our-news/news/example-news-custom-post/
, 我的面包屑会将您引导到包含URL的父页面
www.example.com/our-news/news/
(当然,这并不存在)。
我想知道如何获取我的父页面urlwww.example.com/our-news/
我的自定义帖子url为www.example.com/our-news/example-news-custom-post
这样我的面包屑就不会再将我指向不存在的页面的URL了。