10+
April 23, 2025
November 16, 2015
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”
Limit access to Print Roles
Two custom roles are added by this plugin to best model a real-world print team.
View a Print Issue in “Read Only” mode
XML Export to InDesign: Classic Editor vs. Gutenberg Exports
When exporting content from WordPress for use in InDesign, there are key differences between Classic Editor and Gutenberg (Block Editor) exports. This section highlights how each type of export behaves in InDesign and offers guidance on how to handle these differences.
<p>
, <strong>
, and <em>
, making them straightforward for import into InDesign.<!-- wp:paragraph -->
) that define block-level structures, which may require manual adjustments after importing into InDesign.Import Differences:
Recommendations:
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_Week\Plugins\load_$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_Week\Articles\article_columns
and Eight_Day_Week\Articles\article_meta_$column_name
.
Sample usage:
add_filter( 'Eight_Day_Week\Articles\article_columns', function( $columns ) {
$columns['byline'] = _x( 'Byline', 'Label for multiple, comma separated authors', 'your-text-domain' );
return $columns;
} );
add_filter( 'Eight_Day_Week\Articles\article_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_Week\Print_Issue_Columns\pi_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_Week\Plugins\Article_Export\xml_outer_elements', function( $elements, $article ) {
$elements['subHeadline'] = get_post_meta( $article->ID, 'nyo_dek', true );
return $elements;
}, 10, 2 );
add_filter( 'Eight_Day_Week\Plugins\Article_Export\xml_outer_elements', function( $elements, $article ) {
if( function_exists( '\Eight_Day_Week\Plugins\Article_Byline\get_article_byline' ) ) {
$elements['byline'] = \Eight_Day_Week\Plugins\Article_Byline\get_article_byline( $article );
}
return $elements;
}, 10, 2 );
add_filter( 'Eight_Day_Week\Plugins\Article_Export\xpath_extract', function( $extract ) {
$extract[] = [
'tag_name' => 'pullQuote',
'container' => 'pullQuotes',
'query' => '//p[contains(@class, "pullquote")]'
];
return $extract;
} );
add_filter( 'Eight_Day_Week\Plugins\Article_Export\dom', 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;
} );
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.
Eight Day Week has no settings or configurations to set up. It just works!
No FAQ provided.
Note that this release bumps the WordPress minimum version from 5.7 to 6.5.
braces
from 3.0.2 to 3.0.3 and ws
from 6.2.2 to 6.2.3 (props @dependabot, @iamdharmesh via #150).@cypress/request
from 2.88.12 to 3.0.1 and cypress
from 10.3.0 to 13.1.0 (props @dependabot via #129).Build release zip
action (props @jayedul, @dkotter via #113).simple-git
from 3.15.1 to 3.16.0 (props @dependabot via #110).http-cache-semantics
from 4.1.0 to 4.1.1 (props @dependabot via #111).tough-cookie
from 2.5.0 to 4.1.3 and @cypress/request
from 2.88.10 to 2.88.12 (props @dependabot via #122).Note that this release bumps the WordPress minimum version from 4.6 to 5.7 and the PHP minimum version from 5.6 to 7.4.
Added: Setup E2E tests using Cypress (props @dhanendran, @iamdharmesh via #92).
Active
to Stable
(props @jeffpaul, @dkotter via #94).shelljs
and bump grunt-contrib-jshint
from 2.1.0 to 3.2.0 (props @dependabot via #99).got
from 10.7.0 to 11.8.5 and @wordpress/env
from 4.9.0 to 5.7.0 (props @dependabot via #100).simple-git
from 3.10.0 to 3.15.1 (props @dependabot via #103).simple-get
from 3.1.0 to 3.1.1 (props @dependabot via #82).grunt
from 1.3.0 to 1.5.3 (props @dependabot via #84, #88).DIRECTORY_SEPARATOR
instead of slash in filepaths (props @mnelson4, @dinhtungdu, @Intelligent2013, @samthinkbox).bl
from 1.2.2 to 1.2.3 (props @dependabot).ini
from 1.3.5 to 1.3.7 (props @dependabot).grunt
from 1.0.4 to 1.3.0 (props @dependabot).lodash
from 4.17.19 to 4.17.21 (props @dependabot).ws
from 6.2.1 to 6.2.2 (props @dependabot).path-parse
from 1.0.6 to 1.0.7 (props @dependabot).websocket-extensions
from 0.1.3 to 0.1.4 (props @dependabot).lodash
from 4.17.15 to 4.17.19 (props @dependabot).package.json
and composer.json
to current versions (props @adamsilverstein).gmt_offset
(props @adamsilverstein, Jared Williams).