I’m not completely sure if this is the problem, but note that update_option()
returns a false
if the the old and new option values are the same, so you should not simply do a if ( update_option( self::$option_name, $message_data ) )
check.
So for example, you would instead do something like this:
if ( get_option( self::$option_name ) === $message_data ||
update_option( self::$option_name, $message_data )
) {
// your code here - send a success response and status, etc.
}
Or maybe this:
if ( get_option( self::$option_name ) === $message_data ) {
$message="The old and new " . self::$option_name . ' values are identical.';
return [ 'message' => $message ];
} elseif ( update_option( self::$option_name, $message_data ) ) {
return [ 'message' => 'Successful' ];
} // else, return a WP_Error instance
Additionally, just a note that you should always include set the permission_callback
argument, even for REST API routes that are intended to be public (and if it’s public, then you can use 'permission_callback' => '__return_true',
).