Title: QH Markdown Exporter
Author: quyettran298
Published: <strong>April 27, 2026</strong>
Last modified: April 29, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/qh-markdown-exporter.svg)

# QH Markdown Exporter

 By [quyettran298](https://profiles.wordpress.org/quyettran298/)

[Download](https://downloads.wordpress.org/plugin/qh-markdown-exporter.zip)

 * [Details](https://sa.wordpress.org/plugins/qh-markdown-exporter/#description)
 * [Reviews](https://sa.wordpress.org/plugins/qh-markdown-exporter/#reviews)
 *  [Installation](https://sa.wordpress.org/plugins/qh-markdown-exporter/#installation)
 * [Development](https://sa.wordpress.org/plugins/qh-markdown-exporter/#developers)

 [Support](https://wordpress.org/support/plugin/qh-markdown-exporter/)

## Description

QH Markdown Exporter lets you export any combination of post types and statuses 
as Markdown files — perfectly formatted for [Obsidian](https://obsidian.md/) and
other Markdown-based note-taking apps.

**Key features:**

 * **YAML frontmatter** — title, source URL, author, published date, description,
   tags, and full hierarchical categories
 * **Extended metadata** (optional, on by default) — adds `word_count`, `outline`(
   ordered H2–H4 heading list), and `internal_links` (structured list of links to
   other exported posts) to each file’s frontmatter — ideal for AI/SEO tooling
 * **Clean content** — strips sidebars, widgets, navigation, related-posts blocks,
   social-share plugins, and other injected noise
 * **GFM tables** — converts HTML tables to GitHub-Flavored Markdown pipe tables
 * **Bulk export** — export your entire site at once or filter by post type, status,
   and date range
 * **Large-site support** — chunked AJAX export with live progress bar handles sites
   with thousands of posts
 * **Sitemap export** — optional `sitemap.json` bundled in the ZIP: hierarchical
   pages tree, posts grouped by category, and custom post types — ready for AI/LLM
   ingestion
 * **No dependencies** — pure PHP with no external libraries required

**Output format:**

Each post becomes a `.md` file named `YYYY-MM-DD_Post Title.md` containing:

 `

title: “Post Title”
 source: “https://yoursite.com/post-slug/” author: – “[[Author
Name]]” published: 2024-01-15 created: 2024-06-01 description: “Post excerpt or 
auto-generated summary…” tags: – tag-name categories: – “Parent > Child” word_count:
1250 outline: – “## What This Post Covers” – “### Step One” – “## Conclusion” internal_links:–
slug: “related-post-slug” anchor: “related post title”

 url: “https://yoursite.com/related-post-slug/”

Post Title

Post body in Markdown…
 `

The `word_count`, `outline`, and `internal_links` fields are added when **Include
extended metadata** is ticked (default: on). `internal_links` only lists links to
other posts included in the current export — external links and links to non-exported
content are excluded.

All files are bundled into a single ZIP archive named `{sitename}_md_export_YYYY-
MM-DD.zip`.

## Installation

 1. Upload the `qh-markdown-exporter` folder to the `/wp-content/plugins/` directory,
    or install directly through the WordPress plugin screen.
 2. Activate the plugin through the **Plugins** screen in WordPress.
 3. Go to **Tools  MD Exporter**.
 4. Select the post types and statuses you want to export, optionally set a date range,
    and click **Export & Download ZIP**.

## FAQ

### Which post types are supported?

All public post types registered on your site are available. The `attachment` post
type is excluded by default.

### How does it handle large sites?

For exports above 100 posts the plugin automatically switches to a chunked AJAX 
export. You will see a live progress bar. Each batch of 100 posts is processed separately
to avoid server timeouts.

### Does it export images?

Image tags are converted to Markdown `![alt](src)` format pointing to the original
URLs on your site. The image files themselves are not downloaded or included in 
the ZIP.

### What capability is required to use the exporter?

Users must have the `export` capability (Editor role and above by default).

### Will it conflict with page-builder plugins?

The exporter reads raw `post_content` and processes it through `do_blocks()` (Gutenberg)
then converts HTML to Markdown. It intentionally bypasses `the_content` filters 
to avoid injected content from page builders and other plugins.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“QH Markdown Exporter” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ quyettran298 ](https://profiles.wordpress.org/quyettran298/)

[Translate “QH Markdown Exporter” into your language.](https://translate.wordpress.org/projects/wp-plugins/qh-markdown-exporter)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/qh-markdown-exporter/),
check out the [SVN repository](https://plugins.svn.wordpress.org/qh-markdown-exporter/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/qh-markdown-exporter/)
by [RSS](https://plugins.trac.wordpress.org/log/qh-markdown-exporter/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.6.0

 * Added **Include extended metadata** option (enabled by default) — appends three
   new fields to each file’s YAML frontmatter:
    - `word_count` — integer word count of the post body (plain text, no HTML).
    - `outline` — ordered list of H2, H3, and H4 headings with Markdown prefix (`##`,`###`,`####`).
    - `internal_links` — structured list of links that point to other posts included
      in the same export, each with `slug`, `anchor` text, and canonical `url`. 
      Links to pages, categories, or posts outside the export set are excluded, 
      preventing false “broken link” reports in downstream tools.
 * Extended metadata can be disabled by unchecking the option — the export then 
   produces the same output as previous versions.

#### 1.5.1

 * Refactored sitemap.json output for cleaner AI/LLM consumption.
 * Replaced `posts_by_category` object (dynamic keys) with a `categories` array —
   each category has `id` (slug), `name`, and `posts`.
 * Deduplicated posts: each post now appears only once, under its primary category.
 * Decoded HTML entities in all titles (`&amp;`  `&`, etc.).
 * Filtered out internal builder CPTs (Elementor library, Gutenberg reusable blocks,
   etc.) using the `show_in_nav_menus` flag.
 * Converted `custom_post_types` from a slug-keyed object to a typed array `{ type,
   label, posts }`.
 * Added `metadata` block: site URL, generation date, `total_pages`, `total_categories`,`
   total_posts`.

#### 1.5.0

 * Added optional sitemap.json export — tick “Include sitemap.json” in the export
   form to bundle a site structure file into the ZIP.
 * Sitemap includes: hierarchical pages tree (parent  child), posts grouped by category,
   and public custom post types.
 * Sitemap reflects the live site and intentionally ignores any date-range filters
   set on the export form.

#### 1.4.0

 * Renamed plugin to “QH Markdown Exporter” with slug `qh-markdown-exporter` for
   WordPress.org compliance.
 * Renamed all internal prefixes from `pme_`/`PME_` (3 chars) to `qhmaex_`/`QHMAEX_`(
   6 chars) to meet the 4+ character prefix requirement.
 * Updated text domain from `post-markdown-exporter` to `qh-markdown-exporter` across
   all files.
 * Fixed upload directory path to use `wp_upload_dir()` instead of hardcoded `WP_CONTENT_DIR.'/
   uploads/'`.

#### 1.3.0

 * Renamed plugin to “Post Markdown Exporter” for WordPress.org compliance.
 * Fixed output escaping to meet WordPress coding standards.
 * Replaced unlink() with wp_delete_file() and file_put_contents() with WP_Filesystem.
 * Added wp_unslash() to all sanitized input handling.
 * Fixed i18n placeholder ordering in translatable strings.
 * Updated “Tested up to” to WordPress 6.9.

#### 1.2.0

 * Added chunked AJAX export with live progress bar for large sites.
 * Added date range filter.
 * Improved filename sanitization with Unicode support.
 * Added hierarchical category paths (Parent > Child).

#### 1.1.0

 * Added GFM pipe-table conversion.
 * Added junk-node removal (navigation, sidebars, social share widgets).
 * Added YAML frontmatter with author, tags, and categories.

#### 1.0.0

 * Initial release. Basic HTML-to-Markdown export with ZIP download.

## Meta

 *  Version **1.6.0**
 *  Last updated **1 week ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.8 or higher **
 *  Tested up to **6.9.4**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/qh-markdown-exporter/)
 * Tags
 * [backup](https://sa.wordpress.org/plugins/tags/backup/)[export](https://sa.wordpress.org/plugins/tags/export/)
   [markdown](https://sa.wordpress.org/plugins/tags/markdown/)[posts](https://sa.wordpress.org/plugins/tags/posts/)
 *  [Advanced View](https://sa.wordpress.org/plugins/qh-markdown-exporter/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/qh-markdown-exporter/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/qh-markdown-exporter/reviews/)

## Contributors

 *   [ quyettran298 ](https://profiles.wordpress.org/quyettran298/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/qh-markdown-exporter/)