Control page content visibility based on URL parameter

You can use add_shortcode() to register custom Shortcodes for restricting access to certain parts of the post content.

And here’s a working example, with specific to your case:

function my_rp_shortcode( $atts = [], $content="", $tag = '' ) {
    if ( 'if-rp' === $tag ) {
        // Return $content if the URL query string has action=rp.
        return ( isset( $_GET['action'] ) && 'rp' === $_GET['action'] ) ? $content : '';
    } else { // if-not-rp
        // Return $content if the URL query string doesn't have action=rp.
        return ( empty( $_GET['action'] ) || 'rp' !== $_GET['action'] ) ? $content : '';
    }
}
add_shortcode( 'if-rp', 'my_rp_shortcode' );
add_shortcode( 'if-not-rp', 'my_rp_shortcode' );

You’d add the code to the theme functions file and use the Shortcodes like so:

[if-rp]
This content is shown only if the query string "action" is set to "rp".
Example: example.com/login/?action=rp
[/if-rp]

[if-not-rp]
This content is shown only if the query string "action" is NOT set or the value is NOT "rp".
Example: example.com/login/?action= (empty "action")
Example 2: example.com/login/       (no "action")
[/if-not-rp]

You can change the logic, use two independent Shortcode functions, replace the tags (if-rp and if-not-rp), etc. if you want to. 🙂

tech