WordPress eXtended RSS to Hugo Import

Installs: 6

Dependents: 0

Suggesters: 0

Security: 0

Stars: 10

Watchers: 3

Forks: 1

Open Issues: 3


0.2 2019-10-22 12:15 UTC

This package is auto-updated.

Last update: 2024-05-25 18:46:58 UTC


Go static. Hugo static.

Scrutinizer Code Quality Latest Stable Version PHP from Packagist PDS Skeleton

wprss2hugo is an importer from the WordPress eXtended RSS export file format to the Hugo static site generator.

It aims to be comprehensive and reasonably flexible, but mostly to lower my hosting bill.


wprss2hugo is a command line PHP 7.3+ project and installs with Composer:

composer create-project rarst/wprss2hugo


cd wprss2hugo
php bin/wprss2hugo.php example.WordPress.YYYY-MM-DD.xml

Results are generated in the output folder.

Note: WordPress might not store and export valid HTML paragraphs markup. You might want to add something like add_filter( 'the_content_export', 'wpautop' ); to the WP installation before export.

Command line arguments

php bin/wprss2hugo.php --help

  file                      Path to a WordPress export XML file.
      --content-type=       html|md [default: "html"]
      --front-matter-type=  yaml|toml|json [default: "yaml"]
      --data-type=          yaml|toml|json [default: "yaml"]

Note: conversion to Markdown for the post content is best effort and might be suboptimal on complex markup.

Note: TOML format is not meant for data, data files in TOML will have the data assigned to a dummy data root key.

Data map

Source Destination
site title, URL, description config.[data type]
posts, pages, attachments, custom post types content/[post type]/[slug].[content type]
tags, categories, formats, terms content/[taxonomy]/[term]/_index.[content type]
authors content/authors/[login]/_index.[content type] (taxonomy)
comments data/comments/[post ID].[data type]

Data retrieval


Attachments are stored as attachment page type and can be retrieved by a parent post ID:

{{ $attachments := where (where .Site.Pages "Type" "attachment") "Params.parentid" .Params.id }}

{{ with $attachments }}
    {{ range . }}
        <img src="{{ .Params.attachmenturl }}"
            {{ with .Params.meta._wp_attachment_image_alt }}alt="{{ . }}"{{ end }} />
    {{ end }}
{{ end }}


Comments are stored as data files and can be retrieved by a parent post ID:

{{ with .Site.Data.comments }}
    {{ with index . (string $.Page.Params.id) }}
            {{ range sort . "id" }}
                <li>{{ .author }} says: {{ .content | safeHTML }}</li>
            {{ end }}
    {{ end }}
{{ end }}