Playing for the Wisconsin Timber Rattlers of the Class AMidwest League in 2012, the Timber Rattlers won the Midwest League championship, with Shackelford logging a 4.06 ERA in 27 appearances. In 2013, Shackelford split the season between the High-A Brevard County Manatees of the Florida State League and the Double-A Huntsville Stars of the Southern League, posting a 2–4 record and 3.08 ERA in 44 games between the two teams. After the 2013 season, the Brewers assigned Shackelford to the Arizona Fall League, where he was a member of the championship-winning Surprise Saguaros.[7] On November 20, 2013, the Brewers added Shackelford to their 40-man roster.[8] Shackelford was assigned to Huntsville to begin the 2014 season. He was designated for assignment on July 17, 2014, to make room on the 40-man roster for Irving Falu, without having appeared in a major league game for Milwaukee.[9] He was outrighted to Huntsville on July 19.
After the 2014 season, the Brewers traded Shackelford alongside Barrett Astin to the Cincinnati Reds to complete an August 31 trade for Jonathan Broxton.[10] In 2015, Shackelford spent the year with the Double-A Pensacola Blue Wahoos, logging a 2–4 record and 3.72 ERA in 35 appearances. In 2016, he split the season between Pensacola and the Triple-A Louisville Bats, accumulating a 2–2 record and 2.03 ERA in 35 games between the two teams. On November 7, 2016, he elected free agency. On November 21, Shackelford signed a new minor league contract with the Reds organization.[11] He was assigned to Louisville to begin the 2017 season
The Reds promoted Shackelford to the major leagues for the first time on June 27, 2017.[12][13] He made his major league debut on June 29 allowing 4 earned runs in 2.2 innings against his former team, the Milwaukee Brewers. In 26 games in his rookie year for the Reds, Shackelford was 0–0 with a 4.70 ERA.[6] Shackelford appeared in 5 games for Cincinnati in 2018, but struggled to a 7.88 ERA in 8.0 innings of work. The Reds released Shackelford on June 5, 2018.[14]
On November 21, 2020, after spending two and a half years out of baseball, Shackelford a one-year contract with the Yokohama DeNA BayStarsofNippon Professional Baseball as a developmental squad player (ja:育成選手制度 (日本プロ野球)).[15] On April 23, 2021, Shackelford signed a contract with the BayStars as a registered player under management. (Ja:支配下選手登録)[16] On April 24, he made his NPB debut.[17] He became a free agent following the season.