Have you seen FilterRules[]? For instance,
Graphics[g, FilterRules[options, Options[Graphics]]]
passes only options for Graphics. Here's an example:
ndsolvePlot // ClearAll;
ndsolvePlot // Options =
DeleteDuplicatesBy[Join[Options@NDSolve, Options@ListLinePlot], First];
ndsolvePlot[sys_, y_, dom : {_, _, _}, opts : OptionsPattern[]] :=
With[
{sols = NDSolveValue[sys, y, dom,
FilterRules[Flatten@{opts}, Options@NDSolve]]},
ListLinePlot[sols,
FilterRules[Flatten@{opts}, Options@ListLinePlot]] /;
MatchQ[sols, _InterpolatingFunction | {__InterpolatingFunction}]
];
ndsolvePlot[{y''[x] - x y[x]^4 + y[x]^7 == 0, y[0] == 1,
y'[0] == -1}, y, {x, 0, 10}, Method -> "ExplicitRungeKutta",
Frame -> True]
ndsolvePlot[{y''[x] - x y[x]^4 + y[x]^7 == 0, y[0] == 1,
y'[0] == -1}, y, {x, 0, 10}, Frame -> True, PlotRange -> All]
If you want the default settings for options for the custom function ndsolvePlot[] to be different than the defaults for the components, NDSolve[] or ListLinePlot[], then the FilterRules[] calls should look like this:
FilterRules[Flatten@{opts, Options@ndsolvePlot}, Options@NDSolve]
FilterRules[Flatten@{opts, Options@ndsolvePlot}, Options@ListLinePlot]
Note I did not handle conflicting option values above. For instance the default InterpolationOrder option values are different. The one for ListLinePlot[] is InterpolationOrder -> None and does not work in NDSolve[]. And the default for NDSolve[], InterpolationOrder -> Automatic does something different than None in ListLinePlot[]. In an actual application, one might have to fiddle with the values to get the desired behavior. For instance, one could hard-code the respective defaults like this:
FilterRules[Flatten@{opts,
InterpolationOrder -> Automatic, Options@ndsolvePlot}, Options@NDSolve]
FilterRules[Flatten@{opts,
InterpolationOrder -> None, Options@ndsolvePlot}, Options@ListLinePlot]