Как сделать шорткод для вывода записи по id — add_shortcode?
да, можно.add_shortcode( 'portfolio',  'call_shortcode_portfolio' );
потомfunction call_shortcode_portfolio( $atts, $content = '' ) {
    $atts = shortcode_atts( array( 'id' => null ), $atts );
    $query = new WP_Query( array( 'post_type' => 'your_custom_post_type',  'p' => intval( $atts['id'] ) ) );
}
да, можно.add_shortcode( 'portfolio',  'call_shortcode_portfolio' );
потомfunction call_shortcode_portfolio( $atts, $content = '' ) {
    $atts = shortcode_atts( array( 'id' => null ), $atts );
    $query = new WP_Query( array( 'post_type' => 'your_custom_post_type',  'p' => intval( $atts['id'] ) ) );
}