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-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 / 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 / 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 / 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 / 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',
] );
@ravewebdev
ravewebdev / permissions-callback.php
Last active July 10, 2020 16:28
3.1.2. Handle permissions callback
<?php
function check_initiative_permissions( WP_REST_Request $request ) : bool {
$post_id = $request->get_param( 'id' ) ?? 0;
if ( ! is_user_logged_in() ) {
return false;
}
if ( current_user_can( 'edit_published_posts' ) ) {
return true;
@ravewebdev
ravewebdev / create-nonce.php
Created July 13, 2020 22:22
3.2.1. Create nonce for use with REST API
<?php
function localize_route() {
$nonce = wp_create_nonce( 'wp_rest' );
}
add_action( 'wp_enqueue_scripts', 'localize_route' );