api_nonce_key ] ) // Are we looking at our front-end ajax api endpoint? || 0 !== strpos( $_SERVER['REQUEST_URI'], '/ajax-endpoint-api' ) // Are our request vars empty??? || ! $_REQUEST['ajax_action'] || ! $_REQUEST['some_data'] // Did we pass the nonce test? || ! wp_verify_nonce( $_REQUEST[ $this->api_nonce_key ], $this->api_nonce_key ) ) { // Looks like we failed, so don't do anything (probably will land on a 404) return; } // Now you can do your business logic if ( $some_condition == $_REQUEST['some_data'] ) { wp_send_json_success( 'You did it!' ); } wp_send_json_error( 'Condition failed. :(' ); } /** * Enqueues/Localizes * Pay attention to the api_url, that's important */ public function enqueue_js() { $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_script( 'ajax-endpoint-js', $plugin_url . "assets/js/ajax-endpoint$min.js", array( 'jquery' ), 'version' ); wp_localize_script( 'ajax-endpoint-js', 'ajax_endpoint_data', array( 'debug' => ! $min, 'api_url' => wp_nonce_url( site_url( 'ajax-endpoint-api' ), $this->api_nonce_key, $this->api_nonce_key ), 'error_text' => 'Error Text', 'success_text' => 'Success!', ) ); } }