Before you proceed with any of the recommendations here, please try this in a test environment first. Prior to attempting this in your production environment, you must have a full copy of your system and company databases.
To add the Contract Number field, you must do so via T-SQL, as this field is not a part of the standard fields displayed out of the box. The following script should help:
declare @seqnumbr int;
select @seqnumbr = max(seqnumbr) + 1 from WF40202 where Workflow_Type_Name = 'Purchase Order Approval';
insert into WF40202 (Workflow_Type_Name, Email_Message_Type, SEQNUMBR, Ord_Line, WF_Template_Field_Type, TableSeries, TableDictID, RSRCID, TablePhysicalName, FieldPhysicalName, FieldName, FieldDataType, TableRelationship, AdditionalFields)
values ('Purchase Order Approval', 2, @seqnumbr, 0, 18, 4, 0, 0, 'POP10100', 'POPCONTNUM', 'Contract Number', 5, 1, 0);
insert into WF40202 (Workflow_Type_Name, Email_Message_Type, SEQNUMBR, Ord_Line, WF_Template_Field_Type, TableSeries, TableDictID, RSRCID, TablePhysicalName, FieldPhysicalName, FieldName, FieldDataType, TableRelationship, AdditionalFields)
values ('Purchase Order Approval', 3, @seqnumbr, 0, 18, 4, 0, 0, 'POP10100', 'POPCONTNUM', 'Contract Number', 5, 1, 0);
Once you've added the field, you can go back to compose the message as it should now appear in the list.