WP-Print
WP-Print

WP-Print

4.4/5 (41 ratings) 8K+ active installs Updated Aug 9, 2026
Settings -> WP-Print, choosing what the printable version carries

Settings -> WP-Print, choosing what the printable version carries

WP-Print adds a print link to your posts and pages. Following it gives the reader a clean printable document: your content, its comments if you want them, and nothing else — no theme, no sidebar, no navigation.

Every link in the printed article is numbered and its URL listed at the end, because a reader holding a sheet of paper cannot click anything.

Features

  • A printable version of any post, page or custom post type, at /your-post/print/
  • Every link footnoted with a number and listed at the end of the document
  • Optional comments, images, embedded video and featured image
  • [donotprint] for content that should never reach the printed page
  • One stylesheet in both text directions, with a dark mode for reading before printing
  • Templates and styles you can override from your theme

Donations

I spent most of my free time creating, updating, maintaining and supporting these plugins, if you really love my plugins and could spare me a couple of bucks, I will really appreciate it. If not feel free to use it without any obligations.

Usage

Add the print link to your theme inside the loop, wherever you want it to appear:

if ( function_exists( 'wp_print' ) ) {
    print_link();
}
print_link( $post_text, $page_text, $display ) takes whether to print or return as its third argument. The first two used to override the link text and no longer do anything: the link is one HTML template on the settings screen, under Templates, and `%POST_TYPE%` in it becomes Post, Page or the name of whatever custom post type is being printed. They stay in the signature so that a theme still passing them keeps working.

If you would rather not have the link on every post, leave your theme alone and type [print_link] into the one post or page that needs it.

Shortcodes

  • [print_link] — the print link, in the post or page it is typed into.
  • [donotprint]Not for paper[/donotprint] — the enclosed content is dropped from the printable version and left alone everywhere else. WP-Email honours the same tag, so text you exclude from print is excluded from email too.

Template Tags

  • print_link( $post_text, $page_text, $display ) — the print link. Only the third argument does anything.
  • print_content( $display ) — the post content, prepared for printing.
  • print_comments_content( $display ) — the current comment’s content.
  • print_categories( $before, $after ) — the categories, each wrapped in your markup.
  • print_comments_number() — the comment count as a sentence.
  • print_links( $heading ) — the collected list of URLs.
  • print_can( $type ) — whether one of the options is on.
  • print_disclaimer() — the disclaimer or copyright line.

The Print Link

The print link is one HTML template, at WP-Admin -> Settings -> WP-Print -> Templates. Three placeholders are replaced when it is rendered:

  • %PRINT_URL% — the URL of the printable version.
  • %POST_TYPE% — what is being printed, in the singular: Post, Page, or the name of a custom post type.
  • %PRINT_ICON% — the printer glyph, as an inline SVG that takes its colour from your theme.

Anything else is left in the markup exactly as you typed it. Restore Default Template puts the shipped one back.

Custom Template

WP-Print loads print-posts.php, print-comments.php and print-css.css from your theme’s directory if they exist, child theme first, then parent, then the copies bundled with the plugin. Copy one into your theme to restyle the printable page without losing the change on upgrade.

The bundled copies moved in 3.0.0 — the templates are in includes/ and the stylesheet is css/wp-print.css — but the names your theme overrides them with are unchanged.

Filters

  • wp_print_capability — the capability the settings screen requires. Defaults to manage_options.
  • wp_print_allowed_html — the tags the printed document may carry, in wp_kses() form. Add to it if a block on your site prints markup the default list does not cover.