我想得到这个链接结构mysite。com/sa/post slug/post\\U id/在我的自定义帖子类型上。
这是post\\u类型:
// ex_article Post type
add_action( \'init\', \'ex_article_init\' );
function ex_article_init() {
$args = array(
\'labels\' => array(
\'name\' => _x( \'Article\', \'Post type general name\', \'textdomain\' ),
\'menu_name\' => _x( \'Ex Article\', \'Admin Menu text\', \'textdomain\' )
),
\'public\' => true,
\'show_ui\' => true,
\'hierarchical\' => false,
\'rewrite\' => array(\'slug\' => \'sa\', \'with_front\'=>false ),
---
---
---
);
register_post_type( \'ex_article\', $args );
}
在permalink设置中,我使用
Post Name : mysite.com/sample-post/
. 使用自定义结构对我来说不是一种选择,我需要避免它,而且它对自定义帖子类型没有任何作用。
最合适的回答,由SO网友:Sally CJ 整理而成
实际上,这很容易:
更改生成的permalink结构,使其以post ID而不是post slug结尾(但仍包含post slug):
// After you registered the post type:
register_post_type( \'ex_article\', $args );
// .. run this code:
global $wp_rewrite;
$wp_rewrite->extra_permastructs[\'ex_article\'][\'struct\'] = \'sa/%ex_article%/%post_id%\';
然后替换帖子ID占位符(
%post_id%
) 在生成的具有正确帖子ID的永久链接URL中:
add_filter( \'post_type_link\', function ( $post_link, $post ) {
if ( $post && \'ex_article\' === $post->post_type ) {
return str_replace( \'%post_id%\', $post->ID, $post_link );
}
return $post_link;
}, 10, 2 );
不要忘记
flush/regenerate the rewrite rules! 只需访问permalink设置页面,无需单击;“保存”;按钮