Before
The office answers the phone from morning to night, reading grades off a list.
After
One link on your own website. Anyone can see their own grade, whenever they want.
Import the grades once from an Excel file. After that each person enters their name and ID, sees their own result, receives it by SMS or e-mail and downloads a PDF report card carrying your organisation's name and stamp. You also choose the word your organisation uses — student, university student, learner, participant or your own. No sign-up, no password and not a single new WordPress account.
Results day looks the same everywhere: an office full of phone calls, somebody reading marks off a list, and a handful of people whose grade “got missed”. This plugin turns that one hectic day into a single page on your own website — whether you run a language academy, an exam-prep centre or a university faculty.
The person opens the page, types their first name, surname and ID, and sees their grade. That is the whole flow. No registration, no password and no WordPress account is created — not for them, and not for whoever is chasing the result on their behalf.
The plugin does not decide what to call the people it grades. You pick the word in the settings — student, university student, learner, participant, or whatever your own people are called — and that word is used across the dashboard and on the result card. The settings screen asks for an organisation name, a logo, a stamp or signature and a signatory.
Results go out by SMS, by e-mail, or both. Ten SMS gateways are supported: Kavenegar, MeliPayamak, SMS.ir, IPPanel (FarazSMS) and Ghasedak inside Iran; Twilio, Vonage, MessageBird and Infobip outside it; and a custom webhook with your own URL, method, headers and body template for anything else. E-mail goes through WordPress's own wp_mail, so it works on day one with no account and no per-message cost.
A grade is personal data and the plugin was written on that assumption: a grade is shown only when the name and the ID both match, every “not found” case returns an identical message, attempts are rate-limited per IP and per ID, and a captcha is available. Outside Iran you can use a free-form identifier of your own instead of a national ID.
Before
The office answers the phone from morning to night, reading grades off a list.
After
One link on your own website. Anyone can see their own grade, whenever they want.
Before
The grade list circulates in a WhatsApp group and everybody's mark is in front of everybody.
After
Each person sees only their own grade. No list can be extracted.
Before
Somebody re-enters the grades by hand in yet another system.
After
They upload the same Excel file they already have; the columns are detected automatically.
In the WordPress dashboard, create an exam such as “First term”, “Midterm” or “Placement test” and enter its date.
Upload the Excel file or enter the grades by hand. Columns are matched automatically.
Put the shortcode on a new page and publish it. That is all.
and drop this shortcode onto a page:[hatami_grades_form]
Language and exam-prep academies · technical and vocational colleges · universities and higher-education institutes · state and private schools · exam and certification bodies · driving schools · bootcamps · corporate training departments · private tutors · any organisation that announces exam results to a large number of people.
Everything sits inside the plugin itself. No companion plugin, no cloud service, no monthly fee.
Student, university student, learner, participant or a word of your own. One setting, and that word is used across the dashboard and on the result card.
First name, surname, ID. That is all. No WordPress account is created and your site's user base stays untouched.
Upload the XLSX or CSV file exactly as it is. Automatic column mapping, a ten-row preview and a row-by-row error report.
Kavenegar, MeliPayamak, SMS.ir, IPPanel, Ghasedak, Twilio, Vonage, MessageBird, Infobip and a custom webhook. Free-text or template mode; bulk, single, or automatic the moment an exam is published — with a delivery status for every message.
Through WordPress's own wp_mail, with a subject and body you write yourself. On its own or alongside SMS, with no separate account and no per-message cost.
Logo, organisation name, grade table, the tutor's note, chart, stamp and the signatory's name. A flawless A4 layout behind one download button, right-to-left included.
Enter the exam date in the Jalali calendar and read it back the same way — with a live Gregorian preview, correct leap years and a real 30 Esfand.
A grade trend per person across every exam, the score distribution within one exam for the tutor, and a full profile page per person. No external library.
Name and ID must match together, every error message is identical to block guessing, attempts are limited per IP and per ID, and a captcha is optional.
Every exam is either a draft or published. Until you say so, no grade is visible — even one that has already been entered.
A simple shortcode on any page, or a ready-made block in the editor. The form can be limited to one specific exam.
One direction-agnostic stylesheet that works right-to-left and left-to-right, compatible with most themes, correct on mobile, and no jQuery or extra heavy file.
A CSV export per exam, encoded so Persian Excel opens it correctly, and an option to keep your data when the plugin is deleted.
Error message wording, the pass mark, showing or hiding the numeric grade, tolerance for name typos and dozens of other options.
| Capability | Detail | Included |
|---|---|---|
| Grade lookup without sign-up | First name, surname and ID | |
| Configurable word for your audience | Student, university student, learner, participant or your own | |
| National ID validation | The official check-digit algorithm, in the browser and on the server | |
| Free-form identifier instead of a national ID | Any identifier, with a configurable minimum length and your own label | |
| Three-language interface | English, German and Persian, following the WordPress locale | |
| Tolerance for name typos | ی/ي, ک/ك, zero-width non-joiner and extra spaces | |
| CSV and XLSX import | Column mapping, preview, per-row error report | |
| CSV export | With a BOM so Persian Excel opens it correctly | |
| Ten SMS gateways | Kavenegar, MeliPayamak, SMS.ir, IPPanel, Ghasedak, Twilio, Vonage, MessageBird, Infobip and a webhook | |
| Custom webhook gateway | URL, method, your own headers and a body template, with no code | |
| Delivery by e-mail | Through WordPress's wp_mail, with a subject and body you set | |
| E-mail column on the grade record | In the entry form, the import and the export | |
| Credentials stored per gateway | Switching gateway does not discard the previous key | |
| Register a gateway of your own | The hatami_grades_sms_providers filter | |
| Jalali dates | Full entry, display and validation | |
| Trend and distribution charts | Built-in SVG, no external library | |
| A4 and PDF report card | With logo, your organisation's stamp and the signatory's name | |
| Shortcode and Gutenberg block | With exam and title parameters | |
| Attempt limiting | Per IP and per ID, configurable | |
| Captcha | A simple built-in captcha or reCAPTCHA v3 | |
| High-privacy mode | The raw identifier is never stored | |
| Dedicated tutor capability | No need to make anyone a full administrator | |
| Individual profile and exam statistics | Their own pages in the admin panel | |
| Translatable | pot, po and mo files ship with the plugin | |
| Multisite compatible | Network activation supported | |
| Clean uninstall | With a keep-my-data option |
| Item | Minimum |
|---|---|
| WordPress | 6.0 or newer |
| PHP | 7.4 to 8.3 |
| PHP extension | ZipArchive, only for reading XLSX files (not needed for CSV) |
| SMS panel | An account with one of the ten supported gateways — only if you want to send SMS. E-mail delivery needs no account at all |
| Theme | Any theme; the plugin carries its own stylesheet, working right-to-left and left-to-right |
Yes, and since 1.3.0 that is a setting rather than an argument. You choose the word for your audience — student, university student, learner, participant or one of your own — and it is used across the dashboard and on the result card. The settings screen asks for an organisation name, a logo, a stamp or signature and a signatory. The exam name, the course name and the report-card title are free text and print exactly as you type them. Outside Iran you can use your own free-form identifier instead of a national ID, with any label you like.
No. No WordPress account is created. A person enters their first name, surname and ID, and nothing else.
Both the ID and the name have to be right. The error message is identical for every “not found” case, so nobody can work out by trial and error which IDs exist in the system; attempts are limited per IP and per ID; and you can switch the captcha on as well.
Names are compared after normalisation: ی and ي, ک and ك, the zero-width non-joiner and extra spaces are all treated as equivalent, and up to one character of typing difference is accepted (configurable). The ID, however, must be exactly right.
That is fine. During the import you decide which column maps to which field. Common Persian, English and German headings are also detected automatically, and you preview the first ten rows before anything is inserted.
You pay for SMS directly to your own account, whichever of the ten gateways you use. The plugin adds no intermediary and no extra fee, and it shows you the number of recipients before a bulk send. If you do not want SMS, that part is off by default and you can send results by e-mail instead, which goes through WordPress and costs nothing per message.
There are two ways round it. The custom webhook gateway takes a URL, a method, your own headers and a body template, which covers most SMS APIs without any code. If you have a developer to hand, the hatami_grades_sms_providers filter registers your gateway in the same settings dropdown as the built-in ones.
Yes. The “Download PDF report card” button opens the browser's print dialogue with an A4 layout, and the user saves the file with Save as PDF. That route was chosen deliberately, because it renders Persian and right-to-left text flawlessly and does not slow down on shared hosting.
The plugin has its own stylesheet — right-to-left and left-to-right — and inherits the theme's font, so it works with most themes without extra configuration.
You decide. There is a “keep data on uninstall” option in the settings; with it switched off, deleting the plugin removes every grade and exam.
Plugin bug fixes, installation and setup guidance, and answers to usage questions. Customisation, new feature development and problems caused by other themes or plugins fall outside support and are agreed separately.