WP_Speculation_Rules::add_rule( string $mode, string $id,  $rule ): bool

In this article

Adds a speculation rule to the speculation rules to consider.

Parameters

$modestringrequired
Speculative loading mode. Either 'prefetch' or 'prerender'.
$idstringrequired
Unique string identifier for the speculation rule.
mixed> $rule Associative array of rule arguments.

Return

bool True on success, false if invalid parameters are provided.

Source

public function add_rule( string $mode, string $id, array $rule ): bool {	if ( ! self::is_valid_mode( $mode ) ) {	_doing_it_wrong(	__METHOD__,	sprintf(	/* translators: %s: invalid mode value */	__( 'The value "%s" is not a valid speculation rules mode.' ),	esc_html( $mode )	),	'6.8.0'	);	return false;	}	if ( ! $this->is_valid_id( $id ) ) {	_doing_it_wrong(	__METHOD__,	sprintf(	/* translators: %s: invalid ID value */	__( 'The value "%s" is not a valid ID for a speculation rule.' ),	esc_html( $id )	),	'6.8.0'	);	return false;	}	if ( $this->has_rule( $mode, $id ) ) {	_doing_it_wrong(	__METHOD__,	sprintf(	/* translators: %s: invalid ID value */	__( 'A speculation rule with ID "%s" already exists.' ),	esc_html( $id )	),	'6.8.0'	);	return false;	}	/* * Perform some basic speculation rule validation. * Every rule must have either a 'where' key or a 'urls' key, but not both. * The presence of a 'where' key implies a 'source' of 'document', while the presence of a 'urls' key implies * a 'source' of 'list'. */	if (	( ! isset( $rule['where'] ) && ! isset( $rule['urls'] ) ) ||	( isset( $rule['where'] ) && isset( $rule['urls'] ) )	) {	_doing_it_wrong(	__METHOD__,	sprintf(	/* translators: 1: allowed key, 2: alternative allowed key */	__( 'A speculation rule must include either a "%1$s" key or a "%2$s" key, but not both.' ),	'where',	'urls'	),	'6.8.0'	);	return false;	}	if ( isset( $rule['source'] ) ) {	if ( ! self::is_valid_source( $rule['source'] ) ) {	_doing_it_wrong(	__METHOD__,	sprintf(	/* translators: %s: invalid source value */	__( 'The value "%s" is not a valid source for a speculation rule.' ),	esc_html( $rule['source'] )	),	'6.8.0'	);	return false;	}	if ( 'list' === $rule['source'] && isset( $rule['where'] ) ) {	_doing_it_wrong(	__METHOD__,	sprintf(	/* translators: 1: source value, 2: forbidden key */	__( 'A speculation rule of source "%1$s" must not include a "%2$s" key.' ),	'list',	'where'	),	'6.8.0'	);	return false;	}	if ( 'document' === $rule['source'] && isset( $rule['urls'] ) ) {	_doing_it_wrong(	__METHOD__,	sprintf(	/* translators: 1: source value, 2: forbidden key */	__( 'A speculation rule of source "%1$s" must not include a "%2$s" key.' ),	'document',	'urls'	),	'6.8.0'	);	return false;	}	}	// If there is an 'eagerness' key specified, make sure it's valid.	if ( isset( $rule['eagerness'] ) ) {	if ( ! self::is_valid_eagerness( $rule['eagerness'] ) ) {	_doing_it_wrong(	__METHOD__,	sprintf(	/* translators: %s: invalid eagerness value */	__( 'The value "%s" is not a valid eagerness for a speculation rule.' ),	esc_html( $rule['eagerness'] )	),	'6.8.0'	);	return false;	}	if ( isset( $rule['where'] ) && 'immediate' === $rule['eagerness'] ) {	_doing_it_wrong(	__METHOD__,	sprintf(	/* translators: %s: forbidden eagerness value */	__( 'The eagerness value "%s" is forbidden for document-level speculation rules.' ),	'immediate'	),	'6.8.0'	);	return false;	}	}	if ( ! isset( $this->rules_by_mode[ $mode ] ) ) {	$this->rules_by_mode[ $mode ] = array();	}	$this->rules_by_mode[ $mode ][ $id ] = $rule;	return true; } 

Changelog

VersionDescription
6.8.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.