Skip to content

Instantly share code, notes, and snippets.

View ravewebdev's full-sized avatar

Rae Van Epps ravewebdev

View GitHub Profile
@ravewebdev
ravewebdev / register-block-type.js
Last active July 7, 2020 22:50
1.1.1. Create an ID attribute for your block
registerBlockType( 'rave/initiative-tracker', {
title: __( 'Initiative Tracker', 'initiative-tracker' ),
attributes: {
id: {
type: 'string',
default: '',
},
},
} );
@ravewebdev
ravewebdev / set-id-attribute.js
Last active July 9, 2020 17:33
1.1.2. Set the ID attribute value
registerBlockType( 'rave/initiative-tracker', {
// Code from 1.1.1. and other block properties here...
edit: ( props ) => {
const {
attributes: {
id,
},
clientId,
setAttributes,
} = props;
@ravewebdev
ravewebdev / set-render-callback.php
Last active July 8, 2020 17:37
1.2.1. Set up block to render with PHP
<?php
register_block_type( 'rave/initiative-tracker', array(
'editor_script' => 'initiative-tracker-editor-script',
'editor_style' => 'initiative-tracker-editor-style',
'style' => 'initiative-tracker-style',
'render_callback' => __NAMESPACE__ . '\render_block',
) );
@ravewebdev
ravewebdev / php-block-render.php
Last active July 8, 2020 22:29
1.2.2. Render static version of block in PHP
<?php
function render_block( array $attributes ) : string {
$id = $attributes['id'];
$class = 'wp-block-rave-initiative-tracker';
ob_start();
?>
<div
class="<?php echo esc_attr( $class ); ?>"
@ravewebdev
ravewebdev / scaffold-frontend-component.js
Last active July 8, 2020 22:28
2.1.1. Scaffold component and retrieve original attributes
const FrontendTracker = ( props ) => {
const {
dataAttributes,
className,
} = props;
};
export default FrontendTracker;
@ravewebdev
ravewebdev / track-attr-changes.js
Last active July 14, 2020 19:27
2.1.2. Use State and Effect hooks to track attribute changes
const FrontendTracker = ( props ) => {
// Code from 2.1.1. here...
const [ attributes, setAttributes ] = useState( {
block_id: 0,
} );
useEffect( () => {
setAttributes( {
...dataAttributes,
} );
@ravewebdev
ravewebdev / render-component.js
Last active July 13, 2020 22:28
2.1.3. Render component
const FrontendTracker = ( props ) => {
// Code from 2.1.1.-2.1.2. here...
return (
<div className={ className }>
<!-- Call components to display your block here... -->
</div>
);
};
@ravewebdev
ravewebdev / target-frontend-blocks.js
Last active July 9, 2020 18:29
2.2.1. Target block instances and retrieve attributes
const trackerClass = 'wp-block-rave-initiative-tracker';
const trackers = document.querySelectorAll( `.${trackerClass}` );
trackers.forEach( ( tracker ) => {
const attributes = {
block_id: tracker.dataset.id,
post_id: parseInt( tracker.dataset.post_id, 10 ),
};
} );
@ravewebdev
ravewebdev / re-render-frontend-component.js
Created July 9, 2020 18:44
2.2.2. Re-render blocks with frontend component
trackers.forEach( ( tracker ) => {
// Code from 2.2.1. here...
render(
<FrontendTracker
dataAttributes={ attributes }
className={ trackerClass }
/>,
tracker
);
} );
@ravewebdev
ravewebdev / register-route.php
Last active July 10, 2020 16:12
3.1.1. Register route
<?php
register_rest_route( 'rave-initiative/v1', '/initiative/(?P<id>[\d]+)', [
'methods' => WP_REST_SERVER::EDITABLE,
'callback' => 'update_initiative',
'permission_callback' => 'check_initiative_permissions',
] );