ACF pour WordPress – Trucs et astuces

ACF pour WordPress – Trucs et astuces

Tech web
Cloche d'abonnement aux notifications | |
  • Recevoir les notifications

Au programme, 4 astuces pour vos projets WordPress utilisant le plus populaire des plugins de création de champs, à savoir ACF.

  1. Ajouter des sous-pages d’options
  2. Définir des capabilities sur une page d’options
  3. Ajouter des filtres sur un champ
  4. Spécifier un ordre aléatoire pour un champ de type répéteur
  5. Récapitulatifs des fonctions
  6. Source

 

Ajouter des sous-pages d’options

Les pages d’options sont bien pratiques, mais elles peuvent rapidement déborder et se transformer en véritable usine à gaz. Pour éviter cela, il est conseillé de créer des sous-pages qui contiendront des options triées par thématique.

Commençons par créer une fonction appelée karac_options_page_init dans notre fichier functions.php. A l’intérieur de celle-ci, il est conseillé de vérifier si la fonction ACF acf_add_options_page existe, afin d’éviter d’éventuelles erreurs.

function karac_options_page_init() {
  if( function_exists('acf_add_options_page') ) {
  ...
   }
}

Ajoutons un menu "parent" et spécifions le nom de ce menu (pour l’exemple nous allons choisir "Options générales").

...
   $parent = acf_add_options_page(array(
      'page_title'  => "Options générales",
      'menu_title'  => "Options générales",
      'icon_url' => '',
      'redirect'    => false,
   ));
...

Nous pouvons maintenant ajouter les sous-menus. Dans notre exemple, nous allons créer deux sous-menus. Le premier sera dédié aux options de contact et le second aux options du footer. Comme paramètre, il est important de définir le parent_slug en utilisant le paramètre menu_slug du menu parent (ici $parent).

$contact = acf_add_options_page(array(
   'page_title'  => "Options de contact",
   'menu_title'  => "Contact",
   'parent_slug' => $parent['menu_slug'],
));

$footer= acf_add_options_page(array(
   'page_title'  => "Options du footer",
   'menu_title'  => "Footer",
   'parent_slug' => $parent['menu_slug'],
));

Il nous reste finalement plus qu’à appeler notre fonction karac_options_page_init et le tour est joué !

add_action('acf/init', 'karac_options_page_init');

Le code complet :

add_action('acf/init', 'karac_options_page_init');
function karac_options_page_init() {
   if( function_exists('acf_add_options_page') ) {

      $parent = acf_add_options_page(array(
         'page_title'  => "Options générales",
         'menu_title'  => "Options générales",
         'icon_url' => '',
         'redirect'    => false,
      ));

      $contact = acf_add_options_page(array(
         'page_title'  => "Options de contact",
         'menu_title'  => "Contact",
         'parent_slug' => $parent['menu_slug'],
      ));

       $footer = acf_add_options_page(array(
         'page_title'  => "Options du footer",
         'menu_title'  => "Footer",
         'parent_slug' => $parent['menu_slug'],
       ));
      
   }
}

 

Définir des capabilities sur une page d’options

Afin d’éviter que tout utilisateurs puissent accéder et modifier les différents réglages des pages d’options, il peut être pratique d’y définir des capabilities (droits utilisateurs).

Pour cela, dans notre fichier functions.php, au moment de coder notre page d’option, nous devons spécifier le paramètre capability.

if( function_exists('acf_add_options_page') ) {
    acf_add_options_page();
}

add_action('acf/init', 'karac_options_page_init');

function karac_options_page_init() {
    // Contrôle est-ce que la fonction ACF de création des pages d’options existe
    if( !function_exists('acf_add_options_page') )
        return;
    // enregistrement de la page d’options générales
    $option_page_documents = acf_add_options_page(array(
        'page_title'    => __('Options générales'),
        'menu_title'    => __('Options générales'),
        'menu_slug'     => 'options-generales',
        'capability'    => 'edit_options_generales',
        'redirect'      => false
    ));
}

Et voilà ! Les utilisateurs ne pourront plus accéder à la page d’options, à moins qu’ils ne bénéficient de la capability edit_options_generales.

Pour ajouter une capability à un utilisateur, il vous suffit d’utiliser la fonction add_cap().

Exemple :

$user->add_cap( 'edit_options_generales' );

Vous pouvez également distribuer ce droit directement à tous les utilisateurs ayant un certain rôle (auteur, contributeur, etc.). Si vous désirez en savoir plus sur le sujet, je vous invite à lire l’article WordPress, les rôles et droits utilisateurs.

 

Ajouter des filtres sur un champ

Mise à part la longueur du texte, et peut être le format de fichier, ACF ne propose pas de filtres de contrôles pour ses champs. Il n’est par exemple pas possible de forcer la première lettre en majuscule. Ce cas est pourtant très commun. C’est pourquoi nous allons nous intéresser spécifiquement à celui-ci. Vous pourrez bien évidemment modifier le code pour gérer d’autres situations, spécifiques à vos projets.

Dans notre exemple, nous allons automatiquement modifier la première lettre entrée d’un champ texte ("nom"). Cette opération sera exécutée à chaque fois que le contenu du champ "nom" sera mis à jour.

Rendons-nous dans le fichier functions.php, et ajoutons un filtre. La key du champ sur lequel nous voulons agir doit être spécifiée dans le filtre, sans quoi le filtre interviendra sur les mises à jour de tous les champs ACF.

Dans notre fonction de callback du filtre, nous modifions la valeur entrée dans le champ, pour notre exemple on utilise les fonctions PHP ucfirst() et strtolower(), afin de récupérer la première lettre du contenu et de la passer en majuscule. Finalement, nous retournons cette valeur modifiée.

add_filter('acf/update_value/key=field_5db1a0a56d918', 'karac_acf_enregistrement_nom', 1, 3);

function karac_acf_enregistrement_nom( $value, $post_id, $field  ) {
    $value = ucfirst(strtolower($value));
    return $value;
}

 

Spécifier un ordre aléatoire pour un champ de type répéteur

Les répéteurs ACF sont un type de champ quasi indispensable dans la plupart des projets WordPress. A l’affichage de vos éléments répétés, ceux-ci seront toujours listés dans le même ordre. Dans certains cas, nous aurons besoin de les afficher un ordre aléatoire. Intéressons-nous spécialement à ce cas de figure, avec pour exemple un système de témoignages.

Champs ACF créés :

  • temoignages - Répéteur
  • temoignage_contenu - Texte
  • temoignage_nom_prenom - Texte

Tout d’abord, dans notre page de template, nous récupérons le contenu du répéteur avec un get_field().

$temoignages = get_field('temoignages');

Pour bénéficier d’un ordre aléatoire, il suffit de mélanger le contenu de $temoignages grâce à la fonction PHP shuffle().

shuffle($temoignages);

Maintenant que l’ordre des éléments a été modifié, il ne nous reste plus qu’à utiliser une bonne vieille boucle foreach pour afficher le résultat.

if(!empty($temoignages)):
  foreach($temoignages as $temoignage):
    echo $temoignage['temoignage_contenu'];
    echo '<br>';
    echo $temoignage['temoignage_nom_prenom'];
    echo '<br><br>';
  endforeach;
endif;

 

Récapitulatifs des fonctions

  • acf_add_options_page() - Ajouter une page d’options ACF
  • add_cap() - Attribuer une capability (droit utilisateur)
  • strtolower() - Passer en minuscule une chaîne de caractères
  • shuffle() - Mélanger aléatoirement l’ordre des entrées d’un “tableau”
  • ucfirst() - Passer en majuscule la première lettre d’une chaîne de caractères

 

Source

 

 

 

Catégories :
Tech web

Tags :
PHP Wordpress

Vous avez aimé cet article ? Suivez-nous sur Facebook pour ne rien manquer !