---
title: "PHP Callback"
description: "Create custom blocks with PHP callback functions for dynamic output using the Lazy Blocks plugin."
url: "https://www.lazyblocks.com/docs/blocks-code/php-callback/"
lastUpdated: 2025-02-24
source: "blocks-code/php-callback.mdx"
---
# PHP Callback

PHP callbacks let you handle block rendering with custom PHP functions instead of using the block builder's code editor. This approach is perfect for placing block logic in your theme or plugin files.

## Basic Usage

Replace `my-block` with your block slug and `render_my_block` with your unique function name:

```php title="functions.php"
// Frontend output callback
add_filter('lazyblock/my-block/frontend_callback', 'render_my_block', 10, 2);

// Editor preview callback
add_filter('lazyblock/my-block/editor_callback', 'render_my_block', 10, 2);

if (!function_exists('render_my_block')) :
    /**
     * Block render callback
     *
     * @param string $output     Default block output
     * @param array  $attributes Block attributes
     */
    function render_my_block($output, $attributes) {
        ob_start();
        ?>
        <div class="my-block">
            <?php if (isset($attributes['title'])) : ?>
                <h2><?php echo esc_html($attributes['title']); ?></h2>
            <?php endif; ?>

            <?php if (isset($attributes['content'])) : ?>
                <div class="content">
                    <?php echo wp_kses_post($attributes['content']); ?>
                </div>
            <?php endif; ?>
        </div>
        <?php
        return ob_get_clean();
    }
endif;
```

## Custom Wrappers

### Block Wrapper

By default, Lazy Blocks adds a wrapper to your block output. Disable it with:

```php
add_filter('lazyblock/my-block/frontend_allow_wrapper', '__return_false');
```

### Inner Blocks Wrapper

For blocks using Inner Blocks, disable the default wrapper:

```php
add_filter('lazyblock/my-block/allow_inner_blocks_wrapper', '__return_false');
```

## Advanced Example

```php
add_filter('lazyblock/team-member/frontend_callback', 'render_team_member', 10, 2);

function render_team_member($output, $attributes) {
    // Ensure required data exists
    if (!isset($attributes['name']) || !isset($attributes['role'])) {
        return '';
    }

    // Prepare data
    $name = esc_html($attributes['name']);
    $role = esc_html($attributes['role']);
    $image = isset($attributes['image']['url']) ? $attributes['image']['url'] : '';
    $bio = isset($attributes['bio']) ? wp_kses_post($attributes['bio']) : '';

    ob_start();
    ?>
    <div class="team-member">
        <?php if ($image) : ?>
            <div class="photo">
                <img src="<?php echo esc_url($image); ?>"
                     alt="<?php echo esc_attr($name); ?>">
            </div>
        <?php endif; ?>

        <div class="info">
            <h3 class="name"><?php echo $name; ?></h3>
            <div class="role"><?php echo $role; ?></div>
            <?php if ($bio) : ?>
                <div class="bio"><?php echo $bio; ?></div>
            <?php endif; ?>
        </div>
    </div>
    <?php
    return ob_get_clean();
}
```

Use PHP callbacks when you need:
- Complex dynamic content
- Integration with other WordPress functions
- Custom database queries
- Advanced data processing

## Documentation Index
> Fetch the complete documentation index at: https://www.lazyblocks.com/llms.txt
> Fetch every page in a single file at: https://www.lazyblocks.com/llms-full.txt
