Skip to content

Core Functions API Reference

This page provides detailed documentation for the core functions in the WP Block to HTML library. These functions form the foundation of the library and are essential for converting WordPress blocks to HTML.

convertBlocks()

The main function for converting WordPress blocks to HTML.

Syntax

typescript
function convertBlocks(
  blocks: WordPressBlock | WordPressBlock[], 
  options?: ConversionOptions
): string

Parameters

  • blocks (WordPressBlock | WordPressBlock[]): A single WordPress block or an array of WordPress blocks to convert.
  • options (ConversionOptions) (optional): Configuration options for the conversion process.

Return Value

  • string: HTML string representation of the converted blocks.

Description

The convertBlocks function processes WordPress block data and converts it to HTML. It handles nested block structures, applies CSS framework classes according to the specified options, and supports different content handling modes.

Examples

Basic Usage

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

const blocks = [
  {
    blockName: 'core/paragraph',
    attrs: { 
      content: 'Hello World',
      align: 'center'
    },
    innerBlocks: []
  }
];

const html = convertBlocks(blocks);
console.log(html); // <p class="has-text-align-center">Hello World</p>

With CSS Framework

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

const blocks = [
  {
    blockName: 'core/paragraph',
    attrs: { 
      content: 'Hello World',
      align: 'center'
    },
    innerBlocks: []
  }
];

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

console.log(html); // <p class="text-center">Hello World</p>

Content Handling Modes

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

// With WordPress REST API response containing rendered content
const post = {
  content: {
    rendered: '<p class="has-text-align-center">This is pre-rendered content</p>'
  },
  blocks: [
    {
      blockName: 'core/paragraph',
      attrs: { 
        content: 'This is block content',
        align: 'center'
      },
      innerBlocks: []
    }
  ]
};

// Raw mode (default) - processes block data
const rawHtml = convertBlocks(post.content, {
  contentHandling: 'raw'
});

// Rendered mode - uses the pre-rendered HTML
const renderedHtml = convertBlocks(post.content, {
  contentHandling: 'rendered',
  renderedContent: post.content.rendered
});

// Hybrid mode - applies framework classes to rendered HTML
const hybridHtml = convertBlocks(post.content, {
  contentHandling: 'hybrid',
  renderedContent: post.content.rendered,
  cssFramework: 'tailwind'
});

With Custom Block Transformers

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

const customTransformers = {
  'core/paragraph': {
    transform(block, options) {
      const { attrs = {} } = block;
      const { content = '', align = '' } = attrs;
      
      let className = '';
      if (align && options.cssFramework === 'tailwind') {
        className = `text-${align}`;
      }
      
      return `<p class="${className}">${content}</p>`;
    }
  }
};

const html = convertBlocks(blocks, {
  blockTransformers: customTransformers
});

processBlocksForSSR()

Optimizes WordPress blocks for server-side rendering.

Syntax

typescript
function processBlocksForSSR(
  blocks: WordPressBlock | WordPressBlock[], 
  options?: SSROptions
): WordPressBlock[]

Parameters

  • blocks (WordPressBlock | WordPressBlock[]): A single WordPress block or an array of WordPress blocks to optimize.
  • options (SSROptions) (optional): Configuration options for the SSR optimization process.

Return Value

  • WordPressBlock[]: An optimized array of WordPress blocks.

Description

The processBlocksForSSR function optimizes WordPress blocks for server-side rendering to improve performance metrics like Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS), and Total Blocking Time (TBT). It applies various optimizations based on the specified optimization level.

Examples

Basic Usage

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

const blocks = [
  /* WordPress blocks */
];

const optimizedBlocks = processBlocksForSSR(blocks);
const html = convertBlocks(optimizedBlocks);

Optimization Levels

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

// Minimal optimization
const minimalOptimization = processBlocksForSSR(blocks, {
  optimizationLevel: 'minimal'
});

// Balanced optimization (default)
const balancedOptimization = processBlocksForSSR(blocks, {
  optimizationLevel: 'balanced'
});

// Maximum optimization
const maximumOptimization = processBlocksForSSR(blocks, {
  optimizationLevel: 'maximum'
});

Custom Optimization Settings

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

const optimizedBlocks = processBlocksForSSR(blocks, {
  optimizationLevel: 'balanced',
  lazyLoadMedia: true,
  optimizeImages: true,
  prioritizeAboveTheFold: true,
  preserveFirstImage: true,
  optimizationDepth: 3,
  preProcess: (block) => {
    // Custom pre-processing logic
    return block;
  },
  postProcess: (block) => {
    // Custom post-processing logic
    return block;
  }
});

createBlockHandler()

Creates a custom block transformer for a specific block type.

Syntax

typescript
function createBlockHandler(
  blockType: string, 
  handler: BlockTransformer
): BlockTransformer

Parameters

  • blockType (string): The name of the block type (e.g., 'core/paragraph').
  • handler (BlockTransformer): The transformer object with a transform method.

Return Value

  • BlockTransformer: A block transformer object that can be used with the convertBlocks function.

Description

The createBlockHandler function creates a block transformer for a specific WordPress block type. Block transformers are responsible for converting a WordPress block to HTML. This function helps organize and maintain custom block transformers.

Examples

Creating a Custom Block Handler

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

const paragraphHandler = createBlockHandler('core/paragraph', {
  transform(block, options) {
    const { attrs = {} } = block;
    const { content = '', align = '' } = attrs;
    
    let className = '';
    if (align) {
      className = options.cssFramework === 'tailwind' 
        ? `text-${align}` 
        : `has-text-align-${align}`;
    }
    
    return `<p class="${className}">${content}</p>`;
  }
});

const html = convertBlocks(blocks, {
  blockTransformers: {
    'core/paragraph': paragraphHandler
  }
});

Handling Custom WordPress Blocks

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

// Handler for a custom testimonial block
const testimonialHandler = createBlockHandler('acme/testimonial', {
  transform(block, options) {
    const { attrs = {} } = block;
    const { author = '', quote = '' } = attrs;
    
    return `
      <div class="testimonial">
        <blockquote>${quote}</blockquote>
        <cite>${author}</cite>
      </div>
    `;
  }
});

const html = convertBlocks(blocks, {
  blockTransformers: {
    'acme/testimonial': testimonialHandler
  }
});

getClassMap()

Retrieves the class mapping for a specific CSS framework.

Syntax

typescript
function getClassMap(framework: string): ClassMap

Parameters

  • framework (string): The name of the CSS framework ('default', 'tailwind', 'bootstrap', etc.).

Return Value

  • ClassMap: An object containing class mappings for the specified framework.

Description

The getClassMap function returns the class mapping for a specific CSS framework. Class mappings define how WordPress block attributes are translated to CSS classes for that framework.

Examples

Getting a Framework Class Map

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

// Get Tailwind CSS class mappings
const tailwindClasses = getClassMap('tailwind');
console.log(tailwindClasses.paragraph.alignCenter); // 'text-center'

// Get Bootstrap class mappings
const bootstrapClasses = getClassMap('bootstrap');
console.log(bootstrapClasses.paragraph.alignCenter); // 'text-center'

Using as a Base for Custom Class Map

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

// Get default class mappings as a base
const defaultClasses = getClassMap('default');

// Create custom class map extending the default
const customClasses = {
  ...defaultClasses,
  paragraph: {
    ...defaultClasses.paragraph,
    base: 'custom-paragraph',
    alignCenter: 'custom-center'
  }
};

const html = convertBlocks(blocks, {
  classMap: customClasses
});

createCustomClassMap()

Creates a custom class map by extending a base class map.

Syntax

typescript
function createCustomClassMap(
  baseMap: ClassMap, 
  customMap: Partial<ClassMap>
): ClassMap

Parameters

  • baseMap (ClassMap): The base class map to extend.
  • customMap (Partial<ClassMap>): The custom class mappings to apply.

Return Value

  • ClassMap: A new class map combining the base and custom mappings.

Description

The createCustomClassMap function creates a custom class map by extending a base class map with custom mappings. This allows for targeted customization while inheriting most mappings from an existing framework.

Examples

Creating a Custom Class Map

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

// Get Tailwind CSS class mappings as a base
const tailwindClasses = getClassMap('tailwind');

// Create custom class map extending Tailwind
const customClasses = createCustomClassMap(tailwindClasses, {
  paragraph: {
    base: 'text-gray-800 mb-4',
    alignCenter: 'text-center mx-auto max-w-2xl'
  },
  heading: {
    base: 'font-display',
    level1: 'text-4xl font-bold mb-6'
  }
});

const html = convertBlocks(blocks, {
  classMap: customClasses
});

Combining Multiple Frameworks

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

// Get Tailwind CSS class mappings for layout
const tailwindClasses = getClassMap('tailwind');

// Get Bootstrap class mappings for components
const bootstrapClasses = getClassMap('bootstrap');

// Create hybrid class map
const hybridClasses = createCustomClassMap(tailwindClasses, {
  button: bootstrapClasses.button,
  table: bootstrapClasses.table
});

const html = convertBlocks(blocks, {
  classMap: hybridClasses
});

Type Definitions

WordPressBlock

Represents a WordPress block.

typescript
interface WordPressBlock {
  blockName: string | null;
  attrs?: Record<string, any>;
  innerBlocks?: WordPressBlock[];
  innerContent?: Array<string | null>;
  [key: string]: any;
}

ConversionOptions

Options for the convertBlocks function.

typescript
interface ConversionOptions {
  cssFramework?: 'default' | 'tailwind' | 'bootstrap' | 'custom';
  classMap?: ClassMap;
  contentHandling?: 'raw' | 'rendered' | 'hybrid';
  renderedContent?: string;
  blockTransformers?: Record<string, BlockTransformer>;
  fallbackHandler?: (block: WordPressBlock, options: ConversionOptions) => string;
  ssrOptions?: SSROptions;
  [key: string]: any;
}

SSROptions

Options for the processBlocksForSSR function.

typescript
interface SSROptions {
  optimizationLevel?: 'minimal' | 'balanced' | 'maximum';
  lazyLoadMedia?: boolean;
  optimizeImages?: boolean;
  prioritizeAboveTheFold?: boolean;
  preserveFirstImage?: boolean;
  optimizationDepth?: number;
  preProcess?: (block: WordPressBlock) => WordPressBlock;
  postProcess?: (block: WordPressBlock) => WordPressBlock;
  [key: string]: any;
}

BlockTransformer

Interface for block transformers.

typescript
interface BlockTransformer {
  transform(block: WordPressBlock, options: ConversionOptions): string;
  [key: string]: any;
}

ClassMap

Structure for CSS framework class mappings.

typescript
interface ClassMap {
  paragraph: {
    base: string;
    alignLeft: string;
    alignCenter: string;
    alignRight: string;
    // Other paragraph-specific classes
  };
  heading: {
    base: string;
    level1: string;
    level2: string;
    level3: string;
    level4: string;
    level5: string;
    level6: string;
    // Other heading-specific classes
  };
  // Other block type classes
  [key: string]: Record<string, string>;
}

Released under the MIT License.