問題描述
我正在註冊我的 CPT:
$args = array(
'labels' => $labels,
'public' => true,
'hierarchical' => false,
'rewrite' => array(
'with_front' => false,
'slug' => 'news/events'
),
'supports' => array( 'title', 'editor', 'thumbnail' )
);
register_post_type('events',$args);
現在這樣會產生如下所示的固定連結:/news/events/{post_name}/但是我想要以下永久連結結構:/news/events/{post_id}/{post_name}/。
我該怎麼做?
最佳解決辦法
嘗試這個首先新增到%event_id% 到你的 s 子:
$args = array(
'labels' => $labels,
'public' => true,
'hierarchical' => false,
'rewrite' => array(
'with_front' => false,
'slug' => 'news/events/%event_id%/%postname%'
),
'supports' => array( 'title', 'editor', 'thumbnail' )
);
register_post_type('events',$args);
然後將一個過濾器新增到單個事件字首:
add_filter('post_type_link', 'custom_event_permalink', 1, 3);
function custom_event_permalink($post_link, $id = 0, $leavename) {
global $wp_rewrite;
$post = &get_post($id);
if ( is_wp_error( $post ) || 'events' != $post->post_type)
return $post_link;
$newlink = $wp_rewrite->get_extra_permastruct('events');
$newlink = str_replace("%event_id%", $post->ID, $newlink);
$newlink = home_url(user_trailingslashit($newlink));
return $newlink;
}
這應該是訣竅,但它是未經測試的。並確保重新整理重寫規則。
次佳解決辦法
@Bainternet – 你的答案沒有完全正常工作,但我做了一些更多的搜尋,並能夠把這個過濾器一起工作:
add_filter('post_type_link', 'custom_event_permalink', 1, 3);
function custom_event_permalink($post_link, $id = 0, $leavename) {
if ( strpos('%event_id%', $post_link) === 'FALSE' ) {
return $post_link;
}
$post = &get_post($id);
if ( is_wp_error($post) || $post->post_type != 'events' ) {
return $post_link;
}
return str_replace('%event_id%', $post->ID, $post_link);
}
+1 讓我最大的方式
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。