17. Contenu Flexible | Field Forge - Champs personnalisés, conçus pour la vitesse
Télécharger Se connecter

17. Contenu Flexible

Les champs de Contenu Flexible permettent aux éditeurs de choisir parmi des mises en page prédéfinies pour créer des pages dynamiques. Chaque mise en page a son propre ensemble de sous-champs. Nécessite une licence PRO.

Changement de Mise en Page de Base

php
<?php if ( have_rows( 'page_sections' ) ) : ?>
    <?php while ( have_rows( 'page_sections' ) ) : the_row(); ?>
        <?php if ( get_row_layout() === 'hero' ) : ?>
            <section class="section-hero">
                <h1><?php the_sub_field( 'heading' ); ?></h1>
                <p><?php the_sub_field( 'subheading' ); ?></p>
            </section>
        <?php elseif ( get_row_layout() === 'text_block' ) : ?>
            <section class="section-text">
                <?php the_sub_field( 'content' ); ?>
            </section>
        <?php elseif ( get_row_layout() === 'image_gallery' ) : ?>
            <section class="section-gallery">
                <?php $images = get_sub_field( 'images' ); ?>
                <?php if ( $images ) : ?>
                    <div class="gallery-grid">
                        <?php foreach ( $images as $img ) : ?>
                            <img src="<?php echo esc_url( $img['url'] ); ?>" alt="<?php echo esc_attr( $img['alt'] ); ?>">
                        <?php endforeach; ?>
                    </div>
                <?php endif; ?>
            </section>
        <?php endif; ?>
    <?php endwhile; ?>
<?php endif; ?>

Modèle de Partie de Modèle

Une approche plus propre utilisant get_template_part() :

php
<?php
// page-builder.php
if ( have_rows( 'sections' ) ) :
    while ( have_rows( 'sections' ) ) : the_row();
        $layout = get_row_layout();
        get_template_part( 'template-parts/sections/' . str_replace( '_', '-', $layout ) );
    endwhile;
endif;
?>

Chaque fichier de modèle de section accède directement aux sous-champs :

php
<?php
// template-parts/sections/hero.php
$heading = get_sub_field( 'heading' );
$image   = get_sub_field( 'background_image' );
?>
<section class="hero" <?php if ( $image ) : ?>style="background-image: url(<?php echo esc_url( $image['url'] ); ?>);"<?php endif; ?>>
    <h1><?php echo esc_html( $heading ); ?></h1>
    <p><?php the_sub_field( 'subheading' ); ?></p>
</section>

Création Programmatique de Contenu Flexible

php
$sections = [
    [
        'acf_fc_layout' => 'hero',
        'heading'        => 'Welcome to Our Site',
        'subheading'     => 'We build amazing things.',
        'cta_text'       => 'Learn More',
        'cta_link'       => '/about',
    ],
    [
        'acf_fc_layout' => 'text_block',
        'content'        => '<p>Our story begins with a simple idea...</p>',
    ],
];

$field_def = FIELDFORGE_Field_Groups::instance()->find_field( 'page_builder', $post_id );
FIELDFORGE_Field_Values::instance()->save_compound_field(
    'page_builder',
    $sections,
    $post_id,
    $field_def
);

Assistant IA Forge En ligne

Bonjour ! Je suis l'assistant IA Field Forge. Posez-moi n'importe quelle question sur le plugin — configuration, fonctionnalités, dépannage ou développement.

À l'instant
Propulsé par Forge IA · Parcourir la documentation