カスタム フィールドを管理する CMB2 を使用してサイトを構築する任務を負っています。
当然のことながら、私はオーバー エンジニアリングを試みているため、今後は単純化されたプロセスになるため、このリソースを利用しようとしています: https://github.com/reaktivstudios/cmb2-flexible-content
CMB2 WordPress プラグインをインストールしました。
上記の CMB2 拡張プラグインを抽出、アップロード、有効化しました。
私は今、これをテーマにモジュール化して、別の Web サイトにシームレスにドラッグ アンド ドロップできるようにしようとしています。フォルダの構造は次のとおりです。
ここで、ファイルの内容と、それらがどのように接続されているかを示します。
FC-FUNCTIONS.PHP - これは、コンテンツの作成を開始するためにページ テンプレートで呼び出すことができる関数を作成しています。
function flexible_content() {
require_once(get_stylesheet_directory().'/modules/flexible-content/flexible-content.php');
}
LAYOUTS.PHP - このファイルには、レイアウトごとにグループ化されたすべてのフィールド グループが含まれます。
add_action( 'cmb2_admin_init', 'fc_register_flexible_content_cmb2_field' );
function fc_register_flexible_content_cmb2_field() {
$prefix = '_fc_';
// Basic CMB2 Metabox declaration
$cmb = new_cmb2_box(
array(
'id' => $prefix . 'flexible_content_types',
'title' => __( 'Flexible Content Types' ),
'object_types' => array( 'page', ),
)
);
// Then add your flexible field definition. Each layout group should be defined in the layouts array, with the `ID` for that group as its key. Each layout group can contain a `title` and a list of CMB2 `fields`.
$cmb->add_field(
array(
'name' => __( 'Flexible Content', 'flexible_content' ),
'desc' => __( 'Add flexible content layouts', 'flexible_content' ),
'id' => $prefix . 'flexible_content',
'type' => 'flexible',
'priority' => 'high',
'show_names' => true,
'options' => array(
'flexible_title'=> __( 'Row {#}', 'flexible_content' ),
'add_button' => __( 'Add Row', 'flexible_content' ),
'remove_button' => __( 'Remove Row', 'flexible_content' ),
'sortable' => true,
),
'layouts' => array(
'hero_banner' => array(
'title' => 'Hero Banners',
'type' => 'group',
'description' => __( 'Add slides into the hero banner', 'hero_banners' ),
'repeatable' => true,
'options' => array(
'group_title' => __( 'Banners {#}', 'hero_banners' ),
'add_button' => __( 'Add Another Banner', 'hero_banners' ),
'remove_button' => __( 'Remove Banner', 'hero_banners' ),
'sortable' => true,
),
'fields' => array(
array(
'type' => 'text',
'name' => 'Heading',
'desc' => 'Hero Slide Title',
'id' => 'heading'
),
array(
'type' => 'textarea',
'name' => 'Subheading',
'desc' => 'Hero Slide Subheading Textarea',
'id' => 'subheading'
),
array(
'type' => 'text',
'name' => 'Hero Slide Link Text',
'id' => 'link_text'
),
array(
'type' => 'text_url',
'name' => 'Hero Slide Link URL',
'id' => 'link_url'
)
)
),
'fc_free_text' => array(
'title' => 'Text Group',
'fields' => array(
array(
'type' => 'text',
'name' => 'Title text',
'id' => $prefix . 'title',
),
array(
'type' => 'textarea',
'name' => 'Description textarea',
'id' => $prefix . 'description',
)
)
),
)
)
);
}
FLEXIBLE-CONTENT.PHP - これは、WordPress ページのバックエンドに入力された layouts.php で宣言された、選択され入力されたフィールドごとに取得するレイアウトを決定します。
$prefix = '_fc_';
$flexible_fields = get_post_meta( get_the_ID(), $prefix . 'flexible_content', true );
if ($flexible_fields != '') {
echo '<div class="fc-content">';
foreach( $flexible_fields as $field ) {
if ( 'fc_free_text' === $field['layout'] ) {
// Free Text
require('layouts/inc/templates/fc-free-text.php');
}
}
echo '</div><!-- fc-content -->';
}
私が直面している主な問題は、ボタンが表示されないことです。上下の矢印とリピーター グループの [別のバナーを追加] ボタンが表示されません。それでも、フィールドを表示したり、レイアウトを追加/削除したり、コンテンツを入力したり、フロントエンドで出力したりできます。
ヒーロー バナー グループ フィールドを反復可能にし、各レイアウトをドラッグ アンド ドロップできるようにしてください。
以下は、これが取り組んでいるページの 1 つのバックエンドの画像です。並べ替えができず、同じグループで複数のヒーロー バナーを繰り返して作成するオプション (作成時に指定) がないことがわかります。