Then, in the passage where you want the button to appear:
<<set _psg to $passages.pluck()>>
<<button "link text" _psg>><</button>>
Just remember that every time array.pluck runs, it permanently removes a random element from the array - if there is a way for the player to load the passage with the button multiple times, for example by opening/exiting inventory, etc., this may break the game once the array is empty.To prevent this, you can put the array.pluck part in the button element itself and use goto:
<<button "link text">><<set _psg to $passages.pluck()>><<goto "_psg">><</button>>
You may also want to add code that checks that the Array of Passage Names still contains items in it, before showing the “link” that will consume one of those names.
eg. If you using the 1st of the <<button> macro bases suggestions…
note: As explained in the Macros Arguments section the documentation, you can use back-quote ` characters to force the evaluation of an expression being used to supply an argument for a macro call.
Because both the Array and the _psg variable contains String values you shouldn’t wrap the argument being passed to the <> macro in quotes…
<<button "link text">><<set _psg to $passages.pluck()>><<goto _psg>><</button>>