-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 NEFARIOUSPLAN-CANONICAL-V1 {"body_md":"## The `is_admin()` wrapper is not a check\n\nThe hook registration in `wp-google-map-gold.php`:\n\n```php\nif ( is_admin() ) {\n add_action( 'wp_ajax_wpgmp_temp_access_ajax',\n [ $this, 'wpgmp_temp_access_ajax_callback' ] );\n add_action( 'wp_ajax_nopriv_wpgmp_temp_access_ajax',\n [ $this, 'wpgmp_temp_access_ajax_callback' ] );\n}\n```\n\nThe `is_admin()` guard reads defensively. It is not. `is_admin()` in WordPress returns true for any request that lands on `/wp-admin/admin-ajax.php`, regardless of whether the caller is authenticated. The function asks \"is the code running in the admin area,\" not \"is the caller an administrator.\" The condition is satisfied by anyone hitting the AJAX endpoint, which is precisely what `wp_ajax_nopriv_` is designed to route to. This is one of the older WordPress footguns: a defensive-looking name attached to a function that does not check the property its name suggests.\n\nSo the registration block runs on every admin-ajax request, and inside it, the second `add_action` declares that `wpgmp_temp_access_ajax_callback` should handle the request when there is no logged-in user. This is the WordPress idiom for \"expose this handler to anonymous callers.\" The plugin reaches for it by name.\n\nThe handler body, in the same file:\n\n```php\nfunction wpgmp_temp_access_ajax_callback() {\n check_ajax_referer( 'fc-call-nonce', 'nonce' );\n $temp_access = new WPGMP_Temp_Access();\n $response = $temp_access->wpgmp_temp_access_support();\n wp_send_json( $response );\n}\n```\n\n`check_ajax_referer` calls `wp_verify_nonce` under the hood. There is no `is_user_logged_in()` and no `current_user_can()` before or after. The nonce check is the only gate. The handler then instantiates a class called `WPGMP_Temp_Access` and invokes `wpgmp_temp_access_support`. The names are honest about what the feature is.\n\n## The nonce is on every public page\n\n`wp_localize_script` is the WordPress mechanism for passing PHP values into a JavaScript context. When the plugin's main frontend script enqueues, the plugin emits an inline `