Arthur

Pemberton

Full-stack web applications developer


Trigger WordPress 404 when using parse_request

September 13, 2022Arthur Pemberton0 Comments

I was recently working on an website using an abandoned plugin whose functionality I needed. I noticed however, that all rewritten URLs defined by the plugin return HTTP 200 regardless of if the references resource existed. I tracked the issue down to the code in the parse_request action handler doing nothing after failing to find the resource. So it needed to trigger/raise the 404 status, and to do so was as simple as setting $query->query_vars['error'] = '404';. See an example snippet bellow.

add_action( 'parse_request', 'custom_parse_request' );

function custom_parse_request( $query ) {
	$query_item_exists = false;

	// implement code to lookup item based on query

	if ( $query_item_exists ) {
		// handle changes to query
	}
	else {
		// trigger 404 response
		$query->query_vars['error'] = '404';
	}
}

After this change, WordPress correctly returned HTTP 404 when the resource did not exist, and the 404.php was correctly used.


Leave a Reply