フロントエンドにサーバーサイドレンダリングを使った簡単なブロックがあります。
PHP:
register_block_type( 'some/block', array(
'render_callback' => 'render_my_block',
'attributes' => array(
'stuff' => array(
)
)
));
function render_my_block( $attributes ) {
// $attributes['stuff']
return '<h1>Hello frontend</h1>';
}
どちらでも機能しますが、管理領域でプレビューとしてレンダリングする必要もあるので、JSを追加します。
registerBlockType( 'some/block', {
title: 'Some block',
attributes: {
stuff : {
}
},
edit( { className, attributes, setAttributes } ) {
return (
<Fragment>
<SomeInput />
<SomeOtherInput />
<Preview>
// I need to get contents of PHP function render_my_block here,
// based on current attributes.stuff
</Preview>
</Fragment>
);
},
save( { attributes } ) {
return null; // server side
}
} );
私の質問は - このデータを取得する正しい方法は何ですか? wp_ajax_
コールバック/フィルタを使うべきですか?それともグーテンベルクはこれを処理するためのいくつかの良い方法がありますか?
デフォルトの "Latest Posts"ブロックがどのように機能するかをすでに確認しました。RestAPIを使用して投稿IDとタイトルを取得し、次にそれらを反応によってレンダリングします。しかし私の場合は、単純なHTML文字列を返すだけです。
このようにしたい場合は、edit
メソッドで <ServerSideRender />
コンポーネントを使用する必要があります。
これは、あなたが提供したPHPブロック登録コードに基づいた基本的な実装です。
import { ServerSideRender } from '@wordpress/components';
registerBlockType( 'some/block', {
title: 'Some block',
attributes: {
stuff : {
}
},
edit( { className, attributes, setAttributes } ) {
return (
<Fragment>
<SomeInput />
<SomeOtherInput />
<ServerSideRender
block="some/block"
attributes={ {
stuff: attributes.stuff
} }
/>
</Fragment>
);
},
save( { attributes } ) {
return null; // server side
}
} );
<ServerSideRender />
コンポーネントを使用すると、編集テンプレートのPHPにブロックを最初に登録したときに提供されたrender_callback
を呼び出すことができます。コンポーネントに渡されるattributes
オブジェクトは、コールバックに渡される唯一の関数パラメータとして提供されます。
完全な開示、 WP Codexはこれを言う<ServerSideRender />
コンポーネントの使用について:
サーバー側のレンダリングはフォールバックを意味します。 JavaScriptでのクライアントサイドレンダリングは常に好まれます(クライアントレンダリングはより速く、より良いエディタ操作を可能にします)。