Previously on the CogitActive Saga:
A tiny switch labeled “Require comment.” A small victory, but a victory nonetheless. Great. Except… how exactly do you turn a rating system into a form for requesting something? A rating widget is meant to collect stars, likes, reactions — not structured messages. How do I coax this plugin into behaving like a miniature request form rather than a rating tool?
Introduction
There’s a strange quiet that settles over a post once its comment section closes. Not the peaceful kind—more like a door that shuts itself while someone is still standing on the other side. I chose that silence, of course; closing comments after thirty days was my way of keeping spam at bay. But as I’ve learned, silence is not the same as absence. Readers still arrive, still have thoughts to share. Spam must be kept under control, yes, but genuine engagement should not be collateral damage. That’s the core of the bonus project: finding a way—any way—to reopen comments on demand.
The first step was to assess whether re-opening comments — not permanently, but deliberately, on demand — was even possible. And yes, WordPress’s closed‑comment decree isn’t as irreversible as it pretends to be. With the right key, the door can be opened again, even long after the thirty‑day rule has sealed it shut. But unlocking the door was not a breakthrough — only a proof-of-concept, and just the beginning.
Last time (chapter three of this series), I exposed the next step: having the key to reopen comments wasn’t enough. A locked door is only useful if visitors can tell you they’re waiting outside. Without a way for them to knock, the whole mechanism remains theoretical — a solution waiting for a signal that never arrives. What I needed was a doorbell—some simple, reliable way for readers to signal, “Hey, I’d like to comment here.”
But building a doorbell in WordPress is not as trivial as it sounds. So, I decided to coax a rating plugin—yes, a rating plugin—into behaving like a request form. It’s a bit of a hack, a bit of an experiment, and very much in the spirit of this bonus project: bending a tool designed for stars and reactions into something that can quietly deliver a message: someone wants the conversation reopened. This chapter is about that transformation — and the playful twist that comes with it.
The technical transformation
After clicking Finish 1, I found myself staring at a brand‑new widget that existed in name only — a shell, a promise, a tool that didn’t yet know what it was supposed to become. Now came the part where theory had to meet reality, where I had to coax this rating widget into behaving like something entirely different.
“How do I turn this thing into the doorbell I need?”
I skipped the General panel entirely, heading straight for the Attributes — the place where the real alchemy would happen. The label still said “Like,” a word I’ve never particularly liked, and the thumbs‑up/thumbs‑down icons stared back at me with the same bland indifference as always. None of that mattered. I already knew these placeholders would eventually be replaced by my own SVGs, two simple messages: one meaning “Leave the door closed,” the other “Open it.” The visuals could wait. The transformation I needed was deeper.
And there it was — the tiny switch that had sparked this entire idea months ago: Require comment. I flipped it on. Instantly, hope surged back through the cracks left by the plugin’s questionable maintenance status. A new field appeared, almost shyly: Threshold, offering three choices — Thumbs down, Thumbs up, or Always. And beneath that, a Message area, with the option to set a placeholder for each button individually or one universal line for all of them. That is where my “Please convince me to re‑open the comments” would live.
A rating widget, suddenly capable of asking for a justification. A reaction tool, suddenly capable of carrying a message. A plugin I probably shouldn’t trust, suddenly proving it could do exactly what I needed.
“This can work.”
I didn’t even bother with the Design tab. That could wait — the labels, the wording, the SVGs, all the little aesthetic decisions that would eventually give this widget its personality. The technical hurdle was no longer the obstacle. The plugin, despite its questionable future, had just proven it could carry the weight of this idea. And with that realization came a different kind of energy: it was finally time to have some fun.
The lyrical transformation
When this bonus project first took shape, long before I knew whether the plugin would cooperate or whether the whole idea would collapse under its own impracticality, one thing came to me immediately: the voice. Not the mechanics, not the layout, not the SVGs — the voice. And that voice, from the very beginning, echoed a line from Tolkien that has stayed with me for years:
The way is shut. It was made by those who are Dead, and the Dead keep it, until the time comes. The way is shut.J.R.R. Tolkien
There was something irresistible about the cadence, the solemnity, the sense of a barrier that exists for a reason. It fit the closed‑comment dilemma almost too well. So even before I knew how the widget would work, I knew how it should sound. The request form needed a tone — not bureaucratic, not technical, but mythic, slightly dramatic, and just self‑aware enough to avoid pretension.
A heading
At first, I tried a direct adaptation, almost a one‑to‑one echo: “The comments are shut. They were made by those who have spoken, and those who have spoken keep them, until the time comes. The comments are shut.” But that felt too literal, too bound to the original phrasing. I wanted something that carried the spirit without becoming a parody. So I shifted the emphasis. Comments aren’t guarded by the Dead; they’re guarded by the quiet necessity of moderation. They were opened for discussion, then closed for protection. That was the story I needed to tell.
Slowly, the wording settled into place: “The comments were open to foster discussion, but were closed after 30 days to hold back the tide of spam. The comments are shut… until the time comes.” After several iterations 2 — some too dramatic, some too verbose — the tone finally clicked:
The comments are shut. They were open to foster constructive discussion, but were closed to hold back the tide of spam, until the time comes. The comments are shut.
It had the right weight — a little solemn, a little playful, and perfectly honest about why the door is closed in the first place.
A description
But a heading alone wasn’t enough. The widget needed a second voice, something gentler, something that invited rather than warned. A line that said: If you truly want to speak, here is your chance: “Has the time come? If you believe these comments should reopen, prove it. Make your case below, and perhaps the silence will break once more.” It wasn’t wrong, but it wasn’t right either. It sounded a little too much like a challenge — as if I were standing guard with crossed arms, demanding credentials before letting anyone pass. “Prove it” carried more sharpness than I intended, a tone closer to a gatekeeper than a host.
I wandered through quite a few imperfect versions. Some leaned too heavily into Tolkien, turning the widget into something closer to a prophecy than a prompt. Others drifted too far in the opposite direction, sounding like a customer‑service form politely asking for “additional details.” Neither extreme felt right. I needed something that carried a hint of grandeur without tipping into melodrama — a line that acknowledged the closed door, but didn’t pretend it was guarding the entrance to the Dimholt. I tried variations that were too stern: “Prove your worth. Make your case below.” That felt like I was challenging readers to single combat. Then versions that were too vague: “Explain why you want to comment.” Accurate, yes — but utterly devoid of atmosphere.
I experimented with lines that referenced reforged blades, rightful heirs, and ancient oaths, but each time I stepped back, I realized I was drifting too far from the purpose. This wasn’t a riddle at the gates of Mordor. It was a simple request form — one that needed a touch of poetry, not a full‑blown epic. Slowly, the tone settled. The line needed to be encouraging, purposeful, and just a little dramatic — enough to make the reader smile, not roll their eyes. And after circling through all the extremes, the right balance finally emerged:
If you believe the time has come, let your words speak with purpose, and perhaps the silence shall break once more.
The placeholders
Finally, the placeholder text — the quiet prompt that guides the reader toward the kind of request that actually helps me decide. It had to be clear, practical, and still in harmony with the tone. At first, I tried something very straightforward — almost too straightforward: “Briefly explain why your comment would add value to the discussion. What insight, question, or perspective makes reopening worthwhile?” Accurate, yes. But it felt like the kind of instruction you’d find on a tax form, not on a widget borrowing its cadence from Tolkien. It had no rhythm, no warmth, no invitation. It did nothing to help the reader understand what I actually needed from them.
So I tried the opposite direction — something grander, more dramatic: “State why your comment deserves to be heard — convince me the time has come.” This one had flair, but perhaps a little too much. It sounded like I was demanding a heroic justification, as if the reader needed to present a royal decree before being allowed to speak. The tone was fun, but it overshadowed the purpose. I kept refining, trying to merge clarity with tone, purpose with personality. Each iteration got me a little closer, but none of them struck the balance I wanted — until finally, the pieces aligned. A line that was clear without being clinical, purposeful without being pompous, and still in harmony with the slightly lyrical voice of the widget:
Briefly explain what your comment will be about and why it matters (don’t submit your comment here) — convince me the time has come.
And for the other button — the one that keeps the door shut — I couldn’t resist a small joke, a gentle nudge at the reader’s choice. Something along the lines of:
So… why did you even bother with this widget?
And with that, the voice of the widget was complete — part Tolkien, part practicality, part playful mischief. A tiny doorbell with a personality. Except…
The reality check
A problem so simple, so structural, so embarrassingly obvious in hindsight that I almost laughed when I finally saw it. I had been having so much fun with the creative process — the tone, the cadence, the Tolkien echoes, the playful mischief — that I lost sight of the actual goal. I was taken by the game, swept up in the lyrical transformation, and for a moment I forgot what this widget was for.
Because the truth is painfully straightforward. The widget is not meant to collect opinions about whether comments should stay closed. This widget has only one purpose: to let someone request that comments be reopened. Not to vote. Not to express an opinion. Not to say “no.” Not to participate in a poll. Just to ring the doorbell. So the “Leave them shut” button is philosophically unnecessary. But then the plugin makes it worse.
Once I turned on the plugin’s “Require comment” switch — the very switch that made this whole idea possible — the reality snapped into focus. The plugin doesn’t care about narrative symmetry or UX elegance. It doesn’t understand the difference between a request and a refusal. It doesn’t see two buttons with two meanings. It sees one rule: If the user clicks anything, they must leave a comment. Which means, clicking “Leave them shut — the time has not yet come” still forces the user to type something. The joke placeholder becomes a real requirement. The user must submit a message even when they explicitly choose not to request anything. And that breaks everything.
The second button isn’t just pointless — it actively sabotages the mechanism. It creates friction where there should be none. It generates noise where there should be silence. It produces “requests” from people who don’t want anything reopened. It pollutes the signal I’m trying to capture. My beautiful two‑button design — the balanced choice, the playful symmetry, the ritual phrasing — collapses under the weight of a single technical constraint. The doorbell cannot have two paths. It cannot offer a “no.” It cannot pretend to be a voting booth. There is only one meaningful action: ask to reopen the comments.
“Did you ever see a door with two bells? Of course not. What would be the point of a bell whose purpose is ‘I’m ringing, but don’t open’? A doorbell rings one way. It always has. It always will.”
The final adjustments
Configure tab
I could finally return to where I left the widget: the Attributes panel. The two placeholder buttons I had created earlier, the thumbs up and thumbs down, had served their purpose as scaffolding. Now that the logic was in place, they could go. I deleted them both and replaced them with a single point of interaction, the only one that made sense: one button, one doorbell. With the structure simplified, I added the message that would appear when someone pressed it — the small prompt inviting them to explain what their future comment would be about and why it mattered. The field for the label stayed empty, as did the tooltip label below the icon. There was no need for either. This button wouldn’t rely on a title or a hint to explain itself; its meaning would be built directly into its design.
I opened Inkscape and started crafting the button itself. This time, it wasn’t a tiny reaction squeezed into a square. It was a full‑fledged call‑to‑action, large enough to carry a sentence, and designed to feel like part of the comment workflow rather than an afterthought bolted onto it. I even matched its colors to the behavior of my comment form’s submit button — not the static blue it displays at rest, but the lighter shade it reveals on hover. I had learned my lesson from the reaction buttons: the plugin treats these icons as images, not as real buttons, and it insists on placing a grey shadow over them until the user interacts. If I wanted the doorbell to feel alive from the start, I had to design it in its “hover” state and then adjust the shadow to match my theme’s blue. A small trick, but one that made all the difference.
Once the SVG (i.e., vector graphic) was ready, I needed to get it into the plugin — which meant revisiting a familiar ritual. I knew indeed that the TotalRating interface would not accept SVG uploads directly, so I followed the same workaround I had documented back then: upload the file to the Media Library, copy its URL, and paste it into the widget’s icon field.
When working on my reaction buttons, I had left the Title field empty deliberately because the widget insisted on rendering it as an H4. You don’t use headings for styling, and, more importantly, you don’t skip heading levels. You just don’t 3. But this time, the widget wasn’t meant to live inside the post at all. It was meant to sit exactly where the comment form would normally appear — outside the content. And if it was going to occupy that space, why not let it behave like the comment form too? 4
So I placed my main text “The comments are shut. They were open to foster constructive discussion, but were closed to hold back the tide of spam, until the time comes. The comments are shut.” directly into the Title field, letting the plugin wrap it in its H4. The supporting line — the quiet invitation to speak with purpose — went into the Description field, mirroring the structure of the comment form itself. It felt right. It felt intentional.
I skipped the Entities panel entirely and moved on to Limitations, where I immediately hesitated. “Ratings per session?” The question hung there, a reminder that I was still bending a rating plugin into something it was never designed to be. I didn’t know what the ideal setting should be for a doorbell masquerading as a widget, so I simply reused the configuration I had chosen for my reaction buttons. Not elegant, perhaps, but reasonable enough — and certainly better than guessing blindly.
Then came the Behaviours panel, and here the choice was obvious. I left everything unselected, especially the option to hide results. There would be no results. No scores. No public tally of anything. This wasn’t a rating widget anymore; it was a private signal, a quiet knock on a closed door. And a doorbell doesn’t broadcast how many times it has been pressed. It simply waits.
Design tab
I started with the Emplacement setting: After content. Sadly, there is no “place it where the comment form should be” option. One can dream. Then came the colors, and with them a small trip down memory lane. I reopened my own guide on refining reaction buttons — a reminder of how long it had taken me to understand what each setting actually controlled. Primary color? Tooltip. Irrelevant here. Secondary? The shade used for unselected rating points — stars four and five when you choose three. Also irrelevant for a widget with only one point 5.
The Background setting brought back an old philosophical debate I once had with Copilot. Back then, I had been convinced to use one for my reaction buttons. But my comment form has no background at all, and this doorbell was meant to blend into that space, not stand apart from it. So I left the default untouched and moved on. For now.
The only setting that seemed promising was Dark. My first guess was that it controlled the grey shadow the plugin insists on placing over every icon. I tried replacing it with my theme’s blue, hoping for a small victory. No such luck. The preview made it clear that Dark was styling the H4 heading, not the button.
That left the shadow itself — the stubborn grey veil that refused to budge. I opened my browser’s developer tools and inspected every line of CSS the plugin injected. Nothing obvious. Nothing intuitive. Until I finally found it: a grayscale filter applied directly to the rating points:
.can-rate .point, .can-rate.is-scale .points:hover .point:hover ~ .point, .can-rate.is-scale.has-focus .points .point.has-focus ~ .point, .can-rate.is-scale.has-focus .points .point:focus ~ .point, .is-scale .point.is-checked ~ .point:not(.is-checked), .has-checked.is-scale .point.is-checked ~ .point:not(.is-checked), .has-rated.is-count .is-unchecked {
filter: grayscale(1);
}
So the “shadow” wasn’t a color at all — it was a filter. And filters don’t accept colors. Which meant that, for now, there was no elegant way to recolor it.
I started with the size. The plugin offered four options — Small, Regular, Medium, Large — and I tried them all, grateful for the preview I had finally learned how to use. Large was overwhelming, Medium felt indecisive, and Small… well, Small had a certain charm, but Regular struck the right balance. Big enough to be noticed, not so big that it shouted. Spacing came next: Compact, Normal, Comfortable. It turned out to be nothing more than the distance between the title, the description, and the button. And, unsurprisingly, Normal looked normal. Sometimes the defaults really do know best. For the shape, I chose Rounded over Sharp, though either would have worked. The rounding only affects the background — and since I was still debating whether to keep a background at all, the choice was more symbolic than practical. Tooltip position? Irrelevant.
Custom CSS, however, was worth a visit. This time, I didn’t need to wrestle with the button size. I simply reused the styling I had created for my reaction widget. I just adjusted the description text to match my comment form: a font size of 1.125 rem, a color of #333, and a font weight of 400. A small tweak, but enough to make the widget feel like it belonged. After a few attempts, I also decided not to restyle the H4 heading to mimic the H3 used by my comment form. I had expected the match to look more cohesive, but in practice the widget’s own H4 simply looked better as it was — cleaner, calmer, and more in tune with the space it occupied.
Before leaving the Design tab, I returned to the color settings one last time to remove the default #f2f2f2 background and replace it with pure white (#ffffff). It was closer to the comment form’s look — clean, unadorned, unobtrusive.
The doorbell finally looked the way it was meant to look: clear, inviting, and unmistakably part of the comment ecosystem. The technical transformation had made the widget functional; the design gave it purpose. But even as I made the change, the shadow lingered in my mind. That stubborn grey filter the plugin applies to the button, the one I had finally tracked down in the CSS. The doorbell was nearly complete, but that shadow…
To be continued…
1 The previous post ended at that threshold: the wizard completed, the foundations laid, but the real work still untouched. ^
2 Here is an example of a bad one: “The comments are shut. They were made to invite thoughtful discussion, to add value through constructive insight—both praise and critique. But time passes, and after 30 days, they are closed, kept in silence to hold back the tide of spam. The comments are shut… until the time comes.” ^
3 Skipping heading levels breaks the document outline, which affects screen readers and keyboard navigation. It’s one of the easiest accessibility pitfalls to avoid. ^
4 I had already matched the button’s colors to the form’s hover state; giving the widget a proper heading felt like the natural next step. For the curious — the comment form on my blog starts with an H3. So an H4 here was fine. ^
5 At its core, this plugin functions as a rating tool with the buttons serving as a scoring system. The one furthest to the left is assigned a value of +1, the next one to its right is +2, and so on, with the fifth button on the right carrying a value of +5. Instead of tallying how many users selected each specific button, the plugin calculates a cumulative score for the post based on the values of the selected buttons. ^

