Afficher des champs ACF en fonction du template de la page parent

Posté par PUShAUNE le 15 octobre 2022

0 commentaires :(

Vous avez besoin d’afficher des champs ACF en fonction du template de la page parent ? Voilà un snippet qui vous sera utile.

Ce bout de code vous permet de créer une nouvelle règle d’affichage à votre groupe de champs :

Nouvelle règle d'affichage pour un groupe de champs ACF.

Concrètement, vous allez pouvoir choisir d’afficher votre groupe de champs en fonction du template de la page parent. Ça peut vous être utile pour afficher une sidebarre, un CTA ou du contenu additionnel pour les pages enfants.

Pour faire apparaître cette nouvelle option, vous devez le coller dans votre fichier function.php :

// Ajouter tempate parent aux choix acf
add_filter('acf/location/rule_types', 'acf_location_rules_types');
function acf_location_rules_types( $choices ) {
    $choices['Parent']['parent_template'] = 'Parent Template';
    return $choices;

}

add_filter('acf/location/rule_values/parent_template', 'acf_location_rules_values_parent_template');
function acf_location_rules_values_parent_template( $choices ) {
    $templates = get_page_templates();
    if ( $templates ) {
        foreach ( $templates as $template_name => $template_filename ) {
            $choices[ $template_filename ] = $template_name;
        }
    }
    return $choices;
}

add_filter('acf/location/rule_match/parent_template', 'acf_location_rules_match_parent_template', 10, 3);
function acf_location_rules_match_parent_template( $match, $rule, $options ) {
    $selected_template = $rule['value'];
    global $post;
    $template = get_page_template_slug( $post->post_parent );
    if( $rule['operator'] == "==" ) {
        $match = ( $selected_template == $template );
    } elseif($rule['operator'] == "!=") {
        $match = ( $selected_template != $template );
    }
    return $match;
}

See ya’ space integrateur

Tu kiffes ? Alors partage avec tes potes !

Sois pas timide, lâche tes com’ !

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.