Skip to content

Quick Start Guide

This guide will help you quickly get started with WP Block to HTML, showing the simplest path to convert WordPress Gutenberg blocks to HTML in your project.

Installation

Install the package using your preferred package manager:

bash
# npm
npm install wp-block-to-html

# yarn
yarn add wp-block-to-html

# pnpm
pnpm add wp-block-to-html

Basic Usage

The simplest way to use WP Block to HTML is to convert WordPress blocks to HTML:

javascript
import { convertBlocks } from 'wp-block-to-html';

// WordPress blocks (from the WordPress REST API)
const blocks = [
  {
    blockName: "core/paragraph",
    attrs: {},
    innerBlocks: [],
    innerHTML: "<p>Welcome to my blog post!</p>",
    innerContent: ["<p>Welcome to my blog post!</p>"]
  },
  {
    blockName: "core/heading",
    attrs: { level: 2 },
    innerBlocks: [],
    innerHTML: "<h2>Getting Started</h2>",
    innerContent: ["<h2>Getting Started</h2>"]
  },
  {
    blockName: "core/paragraph",
    attrs: {},
    innerBlocks: [],
    innerHTML: "<p>This is a simple example of WordPress blocks.</p>",
    innerContent: ["<p>This is a simple example of WordPress blocks.</p>"]
  }
];

// Convert blocks to HTML
const html = convertBlocks(blocks);

// Use the HTML in your application
document.getElementById('content').innerHTML = html;

Fetching WordPress Content

Here's how to fetch content from the WordPress REST API and convert it:

javascript
// Fetch a post from WordPress
const fetchPost = async (postId) => {
  try {
    const response = await fetch(`https://your-wordpress-site.com/wp-json/wp/v2/posts/${postId}?_fields=title,content,blocks`);
    
    if (!response.ok) {
      throw new Error('Failed to fetch post');
    }
    
    const post = await response.json();
    
    // Check if blocks are available
    if (post.content) {
      // Convert blocks to HTML with CSS framework integration
      const contentHtml = convertBlocks(post.content, {
        cssFramework: 'tailwind',
        contentHandling: 'html'
      });
      return {
        title: post.title.rendered,
        content: contentHtml
      };
    } else if (post.content?.rendered) {
      // Fallback to pre-rendered content
      return {
        title: post.title.rendered,
        content: post.content.rendered
      };
    } else {
      throw new Error('No content available');
    }
  } catch (error) {
    console.error('Error fetching post:', error);
    throw error;
  }
};

// Usage
try {
  const post = await fetchPost(123);
  document.getElementById('post-title').textContent = post.title;
  document.getElementById('post-content').innerHTML = post.content;
} catch (error) {
  document.getElementById('error-message').textContent = 'Failed to load post';
}

Using CSS Frameworks

WP Block to HTML supports popular CSS frameworks. Here's how to use them:

Tailwind CSS

javascript
const html = convertBlocks(blocks, {
  cssFramework: 'tailwind'
});

Bootstrap

javascript
const html = convertBlocks(blocks, {
  cssFramework: 'bootstrap'
});

Framework Integration

React

For React applications, you can use the React integration:

jsx
import React from 'react';
import { createReactComponent } from 'wp-block-to-html/react';

const WordPressContent = ({ blocks }) => {
  // If blocks are not available, show a message
  if (!blocks || blocks.length === 0) {
    return <p>No content available</p>;
  }
  
  // Create a React component from WordPress blocks
  const BlocksComponent = createReactComponent(blocks, {
    cssFramework: 'tailwind'
  });
  
  return <BlocksComponent />;
};

// Usage
const MyComponent = ({ postData }) => {
  return (
    <div className="post">
      <h1>{postData.title}</h1>
      <WordPressContent blocks={postData.blocks} />
    </div>
  );
};

Vue

For Vue applications:

javascript
import { createVueComponent } from 'wp-block-to-html/vue';

// In your Vue component
export default {
  props: {
    blocks: {
      type: Array,
      required: true
    }
  },
  computed: {
    blocksComponent() {
      return createVueComponent(this.blocks, {
        cssFramework: 'tailwind'
      });
    }
  },
  template: `
    <div class="post">
      <h1>{{ title }}</h1>
      <component :is="blocksComponent" />
    </div>
  `
};

Complete Example

Here's a complete example of displaying WordPress posts with error handling and fallbacks:

javascript
import { convertBlocks } from 'wp-block-to-html';

// Config
const API_URL = 'https://your-wordpress-site.com/wp-json/wp/v2';
const POSTS_CONTAINER = document.getElementById('posts');
const ERROR_CONTAINER = document.getElementById('error');
const LOADING_INDICATOR = document.getElementById('loading');

// Show loading indicator
LOADING_INDICATOR.style.display = 'block';

// Fetch posts
fetch(`${API_URL}/posts?_fields=id,title,excerpt,content,blocks&per_page=5`)
  .then(response => {
    if (!response.ok) {
      throw new Error('Failed to fetch posts');
    }
    return response.json();
  })
  .then(posts => {
    // Hide loading indicator
    LOADING_INDICATOR.style.display = 'none';
    
    if (!posts.length) {
      ERROR_CONTAINER.textContent = 'No posts found';
      ERROR_CONTAINER.style.display = 'block';
      return;
    }
    
    // Clear posts container
    POSTS_CONTAINER.innerHTML = '';
    
    // Process and display each post
    posts.forEach(post => {
      // Create post element
      const postElement = document.createElement('article');
      postElement.className = 'post';
      
      // Add title
      const titleElement = document.createElement('h2');
      titleElement.className = 'post-title';
      titleElement.innerHTML = post.title.rendered;
      postElement.appendChild(titleElement);
      
      // Add content
      const contentElement = document.createElement('div');
      contentElement.className = 'post-content';
      
      // Process content based on what's available
      let contentHtml = '';
      
      if (post.content) {
        // Convert blocks to HTML with CSS framework integration
        contentHtml = convertBlocks(post.content, {
          cssFramework: 'tailwind',
          contentHandling: 'html'
        });
      } else if (post.content?.rendered) {
        // Use pre-rendered content
        contentHtml = post.content.rendered;
      } else {
        contentHtml = '<p>No content available</p>';
      }
      
      contentElement.innerHTML = contentHtml;
      postElement.appendChild(contentElement);
      
      // Add post to container
      POSTS_CONTAINER.appendChild(postElement);
    });
  })
  .catch(error => {
    // Hide loading indicator
    LOADING_INDICATOR.style.display = 'none';
    
    // Show error message
    ERROR_CONTAINER.textContent = `Error: ${error.message}`;
    ERROR_CONTAINER.style.display = 'block';
    
    console.error('Error fetching posts:', error);
  });

Next Steps

Now that you have a basic understanding of WP Block to HTML, you can explore:

Released under the MIT License.