This code works good for me:
add_filter( 'post_link', 'custom_permalink', 'author_link', 10, 3 );
function custom_permalink( $permalink, $post, $leavename ) {
// Get the category for the post
$category = get_the_category($post->ID);
if ( !empty($category) && $category[0]->cat_name == "Tips" ) {
$cat_name = strtolower($category[0]->cat_name);
$authordata = get_userdata( $post->post_author );
$author = $authordata->user_nicename;
$permalink = trailingslashit( home_url("https://wordpress.stackexchange.com/". $cat_name . "https://wordpress.stackexchange.com/" . $author . "https://wordpress.stackexchange.com/" .
$post->post_name ."https://wordpress.stackexchange.com/" ) );
}
return $permalink;
}
add_filter( 'category_link', 'custom_category_permalink', 10, 2 );
function custom_category_permalink( $link, $cat_id ) {
$slug = get_term_field( 'slug', $cat_id, 'category' );
if ( ! is_wp_error( $slug ) && 'tips' === $slug ) {
$link = home_url( user_trailingslashit( '/tips/', 'category' ) );
}
return $link;
}
add_action( 'init', 'custom_rewrite_rules' );
function custom_rewrite_rules() {
add_rewrite_rule(
'tips(?:/page/?([0-9]{1,})|)/?$',
'index.php?category_name=tips&paged=$matches[1]',
'top' // The rule position; either 'top' or 'bottom' (default).
);
add_rewrite_rule(
'tips/\d+/([^/]+)(?:/([0-9]+))?/?$', // <- here, add the \d+/
'index.php?category_name=tips&name=$matches[1]&page=$matches[2]',
'top'
);
}