Developer Tools

Dummy Text Generator: Lorem Ipsum That Behaves Like Real Copy

Lorem ipsum has a longest word of thirteen letters and no umlauts at all, so a layout tested with it is tested with the easiest text it will ever hold. What placeholder text should actually prove, and a generator that produces it.

Dummy Text Generator: Lorem Ipsum That Behaves Like Real Copy

The card grid looked perfect for three weeks. It was filled with lorem ipsum, three lines of it under every title, and the titles all sat neatly on two lines. Then the client sent the real German copy and the first product card read Betriebshaftpflichtversicherung. Thirty-one letters, one word, no place to break it. The title overflowed its box, the button under it slid down eight pixels, and only that one card in the row was wrong.

Nothing was broken in the CSS. The layout had simply never been shown a word longer than thirteen letters, because that is the longest word in the standard lorem ipsum passage. Its average word is 5.35 letters. Seven percent of its words reach ten letters. Real German copy runs past both of those numbers on the first line of the first paragraph, and it does it with characters, ä, ö, ü and ß, that Latin filler contains exactly none of.

Placeholder text is not there to fill a layout. It is there to test one. Text that behaves like the copy you will actually ship finds the box that is too narrow, the heading that wraps to three lines, the excerpt that runs past the fade, and it finds them while the design is still cheap to change.

The generator below makes text you can test with: three vocabularies, four output formats, and a precise mode that fills to an exact character count so you can see what 60 characters looks like in your own card title. It runs entirely in your browser tab and makes no network call of any kind.

Dummy text generator

Dummy text that is worth testing with: Latin, German or English words, real structure, and four output formats including WordPress block markup. Precise mode fills to an exact character count, which is what a meta description at 155 or a card title at 60 actually needs. Every word is picked in this browser tab, nothing is uploaded and no library is loaded.

1 to 100 paragraphs.

Scrambled Cicero. Even word lengths, no diacritics, the shape every designer knows.

Structure
Output format
Flavour
Precise mode
characters, cut on a word boundary

Off. Switch it on and the amount, the structure and the format step aside for one plain line of an exact length.

How it reads
0characters
0words
0sentences
0paragraphs
0 minreading time

The counts describe the text itself, not the markup around it, so switching format never moves them. Reading time is the word count at 200 words a minute.

WunderPaint
The Dynamic Design and Automation Studio
WunderPaint is a layered image editor for your WordPress media library. WunderPaint Studio is the same thing in any browser, free and without an account.

What Latin quietly hides

The usual lorem ipsum is a scrambled passage from Cicero’s De finibus bonorum et malorum, written in 45 BC, cut up by a typesetter who wanted words that nobody would read. That last part still works: your eye slides over Latin, so you judge the shape of the block instead of the sentence. That is a genuine advantage, and it is why Latin filler has outlived every attempt to replace it.

The problem is that the shape it gives you is not the shape your copy has. Measured over the standard opening passage of each of the three vocabularies in the tool above, the differences are not subtle.

Table comparing the standard Latin, German and English placeholder passages: average word length 5.35, 5.67 and 4.94 letters, longest word 13, 17 and 14 letters, and the share of words with ten or more letters shown as bars at 7, 14 and 6 percent, with the Latin passage containing no accented characters.

Three things follow from those numbers. German runs three times as many words of twelve letters or more, so any container sized against Latin is sized against the wrong distribution. Latin contains no umlauts, so a webfont subset with a missing ä, a fallback stack that swaps in a different face for one glyph, or a line height too tight for the diacritics all pass the test silently. And Latin has no compound nouns at all, so overflow-wrap, hyphenation and the point at which a word simply refuses to break are never exercised.

English filler is not safer, it is worse in the other direction: shorter words on average than Latin, and a maximum of fourteen letters in the standard passage. A layout tested with English dummy text and shipped in German has been tested with the easiest text it will ever hold.

Four texts every layout should survive

Generating a thousand words of anything proves very little. Four specific cases find almost every layout bug worth finding, and each of them takes one setting in the generator above.

The longest plausible word

Turn on the long words option. It slips in words of 20 to 37 letters, per vocabulary, and 37 letters is not an exaggeration for German: Rechtsschutzversicherungsgesellschaft is a word people put on invoices. Watch for the container growing instead of the text wrapping, for a word that runs under a neighbouring column, and for a horizontal scrollbar on the whole page rather than on the one element. The fix is usually overflow-wrap: anywhere on the element that holds the title, not a narrower font size.

The shortest plausible sentence

Set the amount to one sentence, or use precise mode with a target of 40 characters. A card designed around three lines of body text looks broken with four words in it: the button floats, the image sits at a different height from its neighbours, the row loses its baseline. This is the case designers skip, because filler is always generous and real copy sometimes is not.

A heading that wraps to three lines

Generate a heading of roughly 90 characters and drop it into your hero. Two lines is what everyone designs for. Three is what happens at 390 pixels wide, and it is where a vertically centred hero starts pushing its own call to action below the fold. If the answer turns out to be a smaller font size on small screens, size it once with a clamp rather than three media queries: type that fits every screen without a single media query covers the arithmetic.

The empty state

The one no generator can produce, and the one you have to check by hand: no excerpt, no subtitle, no image. In WordPress this state is common, because a post with an empty excerpt field does not render nothing. Core’s wp_trim_excerpt() builds one from the content instead, cutting at 55 words and appending a bracketed ellipsis through the excerpt_more filter. So the card that showed a tidy two line summary in the demo shows the first 55 words of an intro paragraph on the real site, at whatever length that happens to be.

Pasting into the block editor

Plain text pasted into the block editor is not taken literally. The paste handler in @wordpress/blocks runs the clipboard content through a Markdown converter first, then through a shortcode converter, then through a chain of HTML filters with names like listReducer, msListConverter, imageCorrector and blockquoteNormaliser, and only then guesses which blocks you meant. A filler line starting with a hyphen becomes a list. A line starting with a hash becomes a heading. A single line with no newline in it, in the default AUTO mode, is pasted inline and produces no new block at all.

There is one clean way past the guessing. Before any of that runs, the handler checks whether the pasted content contains a block delimiter comment, and if it does it hands the whole thing to the block parser untouched, unless the parse collapses into a single classic block. That check is a plain substring test on the opening of a wp: comment. Choose the WordPress blocks output format in the generator and the text arrives as the structure you asked for, every time.

The block markup the tool writes follows the shape the current editor writes itself, checked against real post content on this site: list items as their own blocks inside a ul.wp-block-list, quotes with an inner paragraph block, headings carrying the wp-block-heading class with the level as an attribute.

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Weit hinten, hinter den Wortbergen</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list">
<!-- wp:list-item -->
<li>Vokalien und Konsonantien</li>
<!-- /wp:list-item -->
</ul>
<!-- /wp:list -->

Paste that into the editor and you get a heading block and a list block, not a paragraph containing angle brackets and not a block warning about unexpected content. If you are going the other way and cleaning up text that arrived from a word processor with its own invisible baggage, that is a different job with a different tool.

Theme demo content is a trap

Importing a theme’s demo content feels like the responsible thing to do, and it is the most misleading test available. Demo content is authored after the design, to fit the design. Every card title in it is the length the card wants. Every excerpt is exactly two lines. Every category holds enough posts to fill the grid and never one more, so pagination never appears, and never one fewer, so the half empty row never appears either.

The numbers on this blog make the point. Across 73 posts, titles run from 35 to 80 characters and 24 of them are longer than 60. The one line subline under each title runs from 50 to 160 characters. No demo import contains that spread, because nobody writing demo content types an 80 character title on purpose.

The right test is your own content model at its extremes: the longest title anyone will realistically write, the shortest, and the field somebody left blank. If the design is meant to be filled from real data rather than typed into by hand, that is worth designing for directly, which is the argument behind building the design once and letting your posts fill it in.

The character targets that matter

Two numbers get quoted everywhere: 60 characters for a title and 155 for a meta description. They are useful as targets and wrong as rules, because search results are truncated by pixel width, not character count, so a title full of capital W behaves differently from one full of lowercase l. The character counters that tell you otherwise are measuring the wrong thing. Still, a target you can generate to exactly is worth more than a range you eyeball, and the presets in precise mode are 60 for a card title, 155 for a meta description, 280 for a short post and 600 for an excerpt.

Table of text length targets next to real measurements from this blog: card title 60 characters against post titles of 35 to 80 with 24 of 73 past 60, SEO title 60 against an average of 52, meta description 155 against an average of 154 with 15 records past 160, blog subline 100 against a range of 50 to 160, and the WordPress auto excerpt cut at 55 words.

Precise mode fills to the exact target and never cuts a word in half. It finishes the last few characters by picking a vocabulary word of exactly the right length, backtracking up to eight tokens when no word fits, and every target from 40 to 200 characters lands exactly in all three vocabularies. When it genuinely cannot reach a target it tells you how many characters short it stopped rather than quietly rounding. It is also exclusive: it disables the amount, the structure, the format and the emphasis toggle, says so in its own line, and writes one plain line whatever output format is selected.

What the generator is doing underneath

The text is deterministic on purpose. A seeded linear congruential generator drives every choice, so the same settings always produce the same words. Switch the output format from plain text to HTML to Markdown to blocks and the words do not change, only the wrapping around them. That is what makes it usable for comparison: you can paste the same paragraph into two templates and know the difference you see is the template. New text advances the seed, Reset returns to the opening text. There is no Math.random and no crypto call anywhere in it, because nothing here is a secret.

Limits are clamped rather than obeyed: 100 paragraphs, 300 sentences, 3000 words, 12000 characters, and a precise target between 10 and 2000. An empty or absurd amount falls back to the default for that unit when the field changes. Word and sentence targets are exact. A character target fills up to the nearest whole word, so it never overshoots. The live counts describe the text itself and not the markup around it, which is why they stay put when you change format, and reading time is the conventional 200 words a minute with a one minute floor. A heading is never the last block, because a heading with nothing under it is not a layout test, it is a mistake.

The preview beside the output is built with createElement and textContent only, never innerHTML. It deliberately renders headings as styled divs and links as styled spans, so dropping the tool into a live blog post adds no extra heading to the page outline and no clickable anchors from dummy content. Generated links point at https://example.com/. The long words option is allowed to overflow the preview into its own scrollbar, because seeing that overflow is the entire point of the option.

Where it stops

It does not upload, fetch or store anything, and it offers no download button: copy the text or select it. Only one instance works per page, since the element ids carry the tool prefix rather than a unique instance id. And German shaped filler is not a translation test. It has the letter frequency and the word lengths of German, which is what a layout cares about, but it carries none of the meaning, so a real localisation pass still needs the real strings.

Dummy text also hides a whole class of typographic problem, because it contains almost nothing that goes wrong. No quotation marks to come out straight instead of curly, no numbers to be set in the wrong figures, no acronyms in full capitals, no hyphens standing in for ranges, no URLs to wrap badly. Those are exactly the details in the list of things that give an amateur design away, and a page of Latin will never surface one of them. Test the frame with filler, then test the typography with a real paragraph, quotes, numbers and all.

Last thing: filler ships. It ends up in a footer widget nobody looked at, or in the third tab of a page that went live at midnight. Before launch, search for it.

wp post list --post_type=post,page --post_status=publish 
  --s="Lorem ipsum" --fields=ID,post_title,post_type

Run it again for “Blindtexte” and for “Far far away” if you generated in those vocabularies, and once more against your options table if your theme puts text in customiser fields.

The reason Latin filler survives is real: unreadable text lets you see a layout as shape, and that is a genuine skill worth keeping. The mistake is treating one passage of scrambled Cicero as a complete test. It is a sample of one language, with one word length distribution, one alphabet and no punctuation worth mentioning, and every layout decision you make against it inherits those limits without telling you.

The practical version takes about five minutes. Generate in the language the site will ship in. Turn on the long words option once and fix whatever breaks. Generate one sentence and look at the card that was designed for four. Generate a title at exactly 60 characters and a description at exactly 155, and put both where they will actually appear rather than in a counter. Then blank a field and reload.

What you are buying with those five minutes is the difference between finding the problem now, while the layout is a file you are still editing, and finding it on the morning the real copy arrives, when the fix has to be a compromise. Filler text cannot write your page for you. It can tell you, before anyone else does, which part of the page was never going to hold it.

Dummy Text Generator: Lorem Ipsum That Behaves Like Real Copy

Table of Contents

Learn it by building something

Every week one thing you can make the same afternoon, from dynamic templates to 3D type. Written down step by step.

One mail a week, and then it ends.
Unsubscribe in one click.

WordPress Images

WordPress Featured Image Size: The Theme Decides, Not Core

WordPress does not store a featured image size. It stores an attachment ID, and the theme decides which pixels a visitor sees. Here is where that decision lives, what the crop argument does to a portrait, and why registering a size changes nothing for uploads you already have.

Developer Tools

Hashes and Encoding: Getting Back Into Your Own WordPress

The reset mail never arrives and you are locked out of a site you own. The way back in runs through one column: user_pass in wp_users. Here is what is actually stored there, checked line by line against wp-includes/pluggable.php, plus a browser-only tool that builds both the bare MD5 and the modern $wp bcrypt value.

SEO & Structured Data

WordPress Alt Text: Where It Lives and Why Your Edits Do Not Show

Alt text in WordPress is one postmeta row, copied into the post markup the moment you insert an image. That single fact explains why editing the library changes nothing on pages you already published, why an audit has two halves, and what to fix first.

Troubleshooting

WordPress Missed Schedule: Why WP-Cron Is Not a Cron Job

WP-Cron has no timer and no background process. It is a list of due tasks that gets checked only when somebody loads a page, which explains missed post schedules, stalled backups, and every other scheduled task that silently stops.

Speed & Performance

WordPress Media Library Slow: What Actually Causes It

A media library that takes thirty seconds is not one slow thing. It is a database query, a metadata prime, a JSON build in PHP and eighty image requests, stacked on top of each other. Here is how to measure which one is hurting your site, and the fix order that actually moves the number.

Developer Tools

htaccess Explainer: Reading the File Nobody Reads

Every WordPress site on Apache has an .htaccess, and Apache reads it on every request for every directory in the path. Here is what the WordPress block actually does, why [L] does not mean last, the difference between Redirect and RewriteRule, and which pasted security snippets have done nothing since Apache 2.4.

Download the free WunderPaint Plugin for WordPress

The WunderPaint workspace with the layers panel, adjustment sliders, text style presets and the asset library along the bottom

The Image Editor & Design Studio

Everything described here can be done in the browser, on your own site. The live demo runs the full editor with nothing to install.

Free

Chaos Art

Autonomous painters make one-of-a-kind abstract art in 3D space - gestures, art movements, painterly media, and embeds that paint a new original for every visitor.

Pro

Particle Strokes

Paint with swarms of light: twenty-two movements, a stamp you draw yourself, and curves that give a stroke a shape - the swarm keeps painting for a few seconds after you let go.

Pro

City Diorama

Any place on earth as a miniature you could hold: real streets, water and building footprints raised into a 3D diorama - or wrapped around a sphere as your own tiny planet.

Free

Papercut Art

Layered paper pictures with real depth - a photo sliced along its actual depth into up to twenty layers, parametric landscapes, animals and clouds you can shape, letters with real counters, and a look that runs on three dials.

Pro

3D Earth Studio

A hyperrealistic globe - day and night with city lights, live clouds, atmosphere halo, country borders and highlights, click-to-place markers with flight-route arcs, satellite orbits, seamless rotation video and a live website embed.

Free

Mystic Studio

Turn a birth date into wall art - a real natal chart with houses and aspects, the moon of that night, zodiac and Chinese zodiac posters, numerology cards and a synastry wheel for two, in eight artful themes.

Free

Marble Bath

Marble paper on a virtual water bath - drop, rake and comb real Ebru patterns with gestures, flowers and classic recipes, razor-sharp at any size and re-editable as a layer.

Free

Day Ring

Turn a day into a beautiful circular schedule - colour-coded time blocks as arcs around a 24-hour clock, with concentric rings for overlaps, emoji, templates and a legend.

Free

Code Shot

Turn code into a gorgeous, share-ready image - syntax highlighting, editor themes, window frames and diff highlighting - then drop it into your design as a re-editable layer.

Pro

3D Solar System Studio

Build a date-accurate 3D solar system - real planet positions for any date, photoreal textures and one slider from artistic to true scale - then drop it into your design as an editable layer.