The issue is order of evaluation. When using Replace (/.) the left hand side is evaluated and then the replacement happens. It happens in that order. Your code does not work because it would require the substitution to happen before the evaluation.
Plot requires you to give it a function that it can plot and a domain over which to plot before it can be evaluated.
When values such as DDp depend on the values of some other symbols, it really is often best to define functions. It helps keep track of what each function depends on and has a number of really positive benefits when trying to write organized and testable code.
Clear[DDpP1, DDpE1, DDp]
DDpPl[r1_, r2_, r3_, sk_] := sk*Log[r3/r1]
DDpEl[r1_, r2_, r3_, sk_] := sk/2*(r2^2 - r3^3)/(r3^2*r2^2)
DDp[r1_, r2_, r3_, sk_] := DDpEl[r1, r2, r3, sk] + DDpPl[r1, r2, r3, sk]
You can use a With statement if you like when Plotting:
With[{r1 = 0.2, r2 = 0.3, sk = 300*10^6},
Plot[DDp[r1, r2, r3, sk], {r3, r1, r2}]
]