Skip to content

Content Handling Modes

WP Block to HTML provides three different content handling modes to accommodate different scenarios when working with WordPress content.

Overview of Content Handling Modes

When using the WordPress REST API, you can get content in two main formats:

  1. Raw Block Data: The structured JSON representation of blocks (available in the blocks property when the WordPress site is configured to expose it)
  2. Rendered HTML: The pre-rendered HTML (always available in the content.rendered property)

To handle these different content types, WP Block to HTML provides three content handling modes:

ModeDescriptionUse Case
rawProcess raw block data for full controlWhen you need full control over styling and output
renderedUse pre-rendered HTML as-isWhen block data isn't available or you want to preserve exact WordPress rendering
hybridCombine pre-rendered HTML with framework-specific classesWhen you want WordPress rendering with your framework's styling

Raw Mode (Default)

Raw mode processes the raw block data, giving you full control over the conversion process. This is the default mode.

javascript
const options = {
  contentHandling: 'raw', // This is the default
  cssFramework: 'tailwind'
};

const html = convertBlocks(blockData, options);

Advantages of Raw Mode:

  • Complete control over output HTML
  • Ability to apply CSS framework classes consistently
  • Better integration with framework components
  • Customizable transformations

Example:

javascript
// Input block data
const blockData = {
  blocks: [
    {
      blockName: 'core/paragraph',
      attrs: { align: 'center' },
      innerContent: ['<p>Hello WordPress!</p>']
    }
  ]
};

// Output with raw mode and Tailwind CSS
// <p class="text-center">Hello WordPress!</p>

Rendered Mode

Rendered mode uses the pre-rendered HTML content from WordPress as-is, without processing the block structure.

javascript
const options = {
  contentHandling: 'rendered'
};

const html = convertBlocks(blockData, options);

Advantages of Rendered Mode:

  • Preserves exact WordPress rendering
  • Faster processing (no transformation needed)
  • Fallback when block data isn't available
  • Maintains custom block styling from WordPress

Example:

javascript
// Input block data with pre-rendered HTML
const blockData = {
  blocks: [
    {
      blockName: 'core/paragraph',
      attrs: { align: 'center' },
      innerContent: ['<p class="has-text-align-center">Hello WordPress!</p>']
    }
  ]
};

// Output with rendered mode
// <p class="has-text-align-center">Hello WordPress!</p>

Hybrid Mode

Hybrid mode combines the pre-rendered HTML with your framework's classes, giving you WordPress rendering with your preferred styling.

javascript
const options = {
  contentHandling: 'hybrid',
  cssFramework: 'tailwind'
};

const html = convertBlocks(blockData, options);

Advantages of Hybrid Mode:

  • Preserves complex WordPress rendering
  • Applies your CSS framework classes
  • Good balance between WordPress fidelity and frontend styling
  • Handles custom blocks gracefully

Example:

javascript
// Input block data with pre-rendered HTML
const blockData = {
  blocks: [
    {
      blockName: 'core/paragraph',
      attrs: { align: 'center' },
      innerContent: ['<p class="has-text-align-center">Hello WordPress!</p>']
    }
  ]
};

// Output with hybrid mode and Tailwind CSS
// <p class="has-text-align-center text-center">Hello WordPress!</p>

Which Mode Should You Use?

Here's a guide to help you choose the right content handling mode:

  • Choose Raw Mode when:

    • You need complete control over the output HTML
    • You want consistent application of your CSS framework classes
    • You're creating a completely custom design
  • Choose Rendered Mode when:

    • Block data isn't available from the WordPress API
    • You want to preserve the exact WordPress rendering
    • You're working with complex custom blocks
  • Choose Hybrid Mode when:

    • You want WordPress rendering but with your CSS framework
    • You're working with a mix of standard and custom blocks
    • You need a balance between WordPress fidelity and frontend styling

Using Content Handling Modes with the WordPress API

Here's a practical example of how to handle different WordPress API responses:

javascript
async function fetchWordPressPost() {
  const response = await fetch('https://example.com/wp-json/wp/v2/posts/1?_fields=id,title,content,blocks');
  const post = await response.json();
  
  let htmlContent;
  
  // Check if blocks data is available
  if (post.content) {
    // Generate HTML from blocks with hybrid mode
    htmlContent = convertBlocks(post.content, {
      cssFramework: 'tailwind',
      contentHandling: 'hybrid'
    });
  } 
  // Fall back to rendered content if no blocks are available
  else if (post.content && post.content.rendered) {
    htmlContent = post.content.rendered;
  }
  
  return htmlContent;
}

This approach provides a flexible way to handle WordPress content in any scenario.

Released under the MIT License.