在永久链接中使用自定义帖子类型帖子ID,而不是帖子标题


Use Custom Post Type post ID in permalink rather than post title

我有一个自定义帖子类型'Employees'。我试图重写的鼻涕条使用的帖子ID,而不是默认的帖子标题。是否有一个简单的方法来做到这一点在自定义Post类型功能下的"重写"?

像这样:

   'rewrite' => [
        'with_front' => false,
        'slug' => 'employee/' . %post_id%,
    ]

在自定义的post类型永久链接结构中,用post ID替换post段符

改变

somedomain.com/some-permalink/postronglug

somedomain.com/some-permalink/123

假设post类型已经存在

'rewrite' => array('slug' => ' sometype ')

function _post_type_rewrite() {
global $wp_rewrite;
// Set the query arguments used by WordPress
$queryarg = 'post_type=some-type&p=';
// Concatenate %cpt_id% to $queryarg (eg.. &p=123)
$wp_rewrite->add_rewrite_tag( '%cpt_id%', '([^/]+)', $queryarg );
// Add the permalink structure
$wp_rewrite->add_permastruct( 'some-type', '/some-type/%cpt_id%/', false );
}
  add_action( 'init', '_post_type_rewrite' );
/**
  * Replace permalink segment with post ID
  *
  */
function _post_type_permalink( $post_link, $id = 0, $leavename ) {
global $wp_rewrite;
$post = get_post( $id );
if ( is_wp_error( $post ) )
    return $post;
    // Get post permalink (should be something like /some-type/%cpt_id%/
    $newlink = $wp_rewrite->get_extra_permastruct( 'some-type' );
    // Replace %cpt_id% in permalink structure with actual post ID
    $newlink = str_replace( '%cpt_id%', $post->ID, $newlink );
    $newlink = home_url( user_trailingslashit( $newlink ) );
return $newlink;
  }
 add_filter('post_type_link', '_post_type_permalink', 1, 3);

来源:https://joebuckle.me/quickie/wordpress-replace-post-name-slug-post-id-custom-post-types/

我在一个较早的项目(未测试)中使用了类似的方法:

'rewrite' => array(
    'with_front' => false,
    'slug' => 'news/events/%employee_id%'
)

add_filter('post_type_link', 'custom_employee_permalink', 1, 3);
function custom_employee_permalink($post_link, $id = 0, $leavename) {
    if ( strpos('%employee_id%', $post_link) === 'FALSE' ) {
        return $post_link;
    }
    $post = &get_post($id);
    if ( is_wp_error($post) || $post->post_type != 'employee' ) {
        return $post_link;
    }
    return str_replace('%employee_id%', $post->ID, $post_link);
}