Eight Day Week Print Workflow

Eight Day Week provides a set of tools to manage your print workflow directly in your WordPress dashboard–right where your posts are!

Primarily, it offers an interface to group, label, and manage the workflow status of posts in a printed “Issue”.

Features:

Create “Print Issues”

  • Add and order sections, and articles within sections
  • Assign article statuses specific to your print workflow

Limit access to Print Roles

Two custom roles are added by this plugin to best model a real-world print team.

  • The Print Editor role offers full access to the creation interfaces, such as Print Issue, Article Status, Print Publication, etc.
  • The Print Production role offers read-only access to a Print Issues. The XML export tool is also available to Production users.

View a Print Issue in “Read Only” mode

  • Circumvents the post locking feature by offering a read-only view of a print issue

XML Export to InDesign

  • Export XML files specifically formatted for import into InDesign

Filters & Hooks

Eight Day Week provides a number of filters and hooks for customizing and extending the plugin.

Modules

Eight Day Week follows a module-style approach to many of its features. These can be turned on or off via filters, and all work independently.
These are:
Article Byline
Article Count
Article Export
Article Status
Issue Publication
Issue Status
Any of these can be disabled by returning a false value from the following filter format:

add_filter( 'Eight_Day_WeekPluginsload_$plugin', '__return_false' );

The $plugin value is a slug version of the plugin name, i.e. article-byline.

Article Table

The information displayed in the list of articles within a Print Issue is filterable. Custom columns can be added via the following filters: Eight_Day_WeekArticlesarticle_columns and Eight_Day_WeekArticlesarticle_meta_$column_name.

Sample usage:

add_filter( 'Eight_Day_WeekArticlesarticle_columns', function( $columns ) {
    $columns['byline'] = _x( 'Byline', 'Label for multiple, comma separated authors', 'your-text-domain' );
    return $columns;
} );
add_filter( 'Eight_Day_WeekArticlesarticle_meta_byline', function( $incoming_value, $post ) {
    return implode( ', ', wp_list_pluck( my_get_post_authors_function( $post ), 'display_name' ) );
}

Print Issue Table

The information displayed in the list of Print Issues is filterable. Custom columns can be added via the following filter:
Eight_Day_WeekPrint_Issue_Columnspi_columns. Note that this is a convenience filter, the base filter is manage_edit-print-issue_columns. See includes/functions/print-issue-columns.php for sample usage.

Article Export

The export of posts in a Print Issue is highly customizable, from the file name of the zip, to the file name of the individual files, to the contents of the files themselves. The best reference would be to read through includes/functions/plugins/article-export.php. Here’s a few examples used on the Observer.

Sample Eight Day Week filters for the Observer

Examples from Observer’s eight-day-week-filters.php:

<?php

add_filter( 'Eight_Day_WeekPluginsArticle_Exportxml_outer_elements', function( $elements, $article ) {
    $elements['subHeadline'] = get_post_meta( $article->ID, 'nyo_dek', true );
    return $elements;
}, 10, 2 );

add_filter( 'Eight_Day_WeekPluginsArticle_Exportxml_outer_elements', function( $elements, $article ) {
    if( function_exists( 'Eight_Day_WeekPluginsArticle_Bylineget_article_byline' ) ) {
        $elements['byline']      = Eight_Day_WeekPluginsArticle_Bylineget_article_byline( $article );
    }
    return $elements;
}, 10, 2 );

add_filter( 'Eight_Day_WeekPluginsArticle_Exportxpath_extract', function( $extract ) {
    $extract[] = [
        'tag_name'  => 'pullQuote',
        'container' => 'pullQuotes',
        'query'     => '//p[contains(@class, "pullquote")]'
    ];
    return $extract;
} );

add_filter( 'Eight_Day_WeekPluginsArticle_Exportdom', function ( $dom ) {
    $swap_tag_name = 'emphasized';

    $extract_map = [
        'strong' => [
            'solo'  => 'bold',
            'inner' => 'em'
        ],
        'em'     => [
            'solo'  => 'italics',
            'inner' => 'strong'
        ],
    ];

    foreach ( $extract_map as $tag_name => $map ) {
        $nodes  = $dom->getElementsByTagName( $tag_name );
        $length = $nodes->length;

        for ( $i = $length; -- $i >= 0; ) {
            $el         = $nodes->item( $i );
            $emphasized = $el->getElementsByTagName( $map['inner'] );
            if ( $emphasized->length ) {
                $em            = $dom->createElement( $swap_tag_name );
                $em->nodeValue = $el->nodeValue;
                try {
                    $el->parentNode->replaceChild( $em, $el );
                } catch ( Exception $e ) {

                }
                continue;
            }

            $new            = $dom->createElement( $map['solo'] );
            $new->nodeValue = $el->nodeValue;
            try {
                $el->parentNode->replaceChild( $new, $el );
            } catch ( Exception $e ) {

            }

        }

    }

    return $dom;

} );

Known Caveats/Issues

Gutenberg exports
Gutenberg-based exports include some additional metadata/details that a Classic Editor-based export does not. Gutenberg stores block data in HTML comments, so you’ll notice those comments (in the form of <!-- "Gutenberg block data" -->) appearing in the Eight Day Week XML export. Note that the XML is still valid–you can test and confirm that yourself using an XML validator–though depending on your version of InDesign you may get different results upon importing a Gutenberg export compared to a Classic Editor export. Our testing showed that those HTML comments in a Gutenberg export did not affect the import into InDesign however. You can test how this works in your version of InDesign with these sample XML files: Gutenberg XML, Classic Editor XML. You can also test how this works with full ZIP exports of Print Issues containing a Block Editor sample or a Classic Editor sample.

The Print Issue list table.

The Print Issue editor showing the sections and contained articles, buttons to add sections & articles, and options for the Publication, Issue Status, and Issue Date. Each section has a Save button for convenience; all Save buttons simply save the entire Print Issue.

A Print Issue in "read only view". This view allows anyone with access to view a Print Issue without inducing a post lock, or being locked out by another editor. Note that the Export tools are still available in read only view.

The Issue Statuses category page.

The Publications category page.

The Article Status category page.

The Users list table, showing the "Change print role to..." dropdown and "Print Role" column.

A sample article XML export for InDesign.

  • Rating
  • Requires 5.7+
  • Downloads 4,919
  • Updated 2024-02-29
  1. Hey there, I’m the managing editor of a weekly newspaper in South Africa. We’re looking at revamping our workflows, and our eye was caught by the Eight Days a Week WordPress plugin you developed for the Observer.com. I see it was developed in 2015 and updated in 2016 – do you have any plans to revisit it for the new WordPress environment?

  2. Hey Matthew, thanks for reaching out. You have great timing — we recently took over ownership of the plugin again, and have updated our roadmap to include some necessary updates to modernize it and make sure it’s compatible with current WordPress.

    While we don’t have a specific timetable for that, we expect to roll out some updates in 2019, and when we do, we’ll definitely update the plugin repo and make other public announcements.

Leave a Reply to Matthew du Plessis

Cancel Reply

Finely crafted websites & tools that make the web better.