EpicWordpress .dev

Optimisation WordPress et ACF: Préserver la Base de Données

Auteurs
  • avatar
    Nom
    Jean-Simon Lyonnais

Récemment, j'ai travaillé pour un client en programmation en binôme (avec un autre développeur) et j'ai rapidement réalisé qu'il y a encore des questions sur comment aborder les champs personnalisés dans WordPress.

D'abord, faisons un rappel de ce qu'est ACF — Champs personnalisés avancés pour les développeurs WordPress. Les Champs personnalisés avancés est une extension WordPress qui vous permet d'ajouter des champs de contenu supplémentaires à vos écrans de modification WordPress. Ces champs de contenu supplémentaires sont plus communément appelés Champs personnalisés et peuvent vous permettre de construire des sites web plus rapidement et d'informer vos clients plus vite. C'est un outil essentiel pour personnaliser votre site selon les besoins spécifiques de votre projet, offrant une flexibilité et une facilité d'utilisation inégalées.

ACF dans l'admin WP

ACF propose deux façons de travailler. La première, simple, c'est de l'utiliser tel quel et de créer des groupes de champs dans l'admin WordPress, de les lier à une page (ou des options, ou autre chose) puis de les utiliser dans votre code.

Image de https://www.advancedcustomfields.com/

Ça fonctionne bien, mais le problème c'est que si vous perdez votre base de données, vous allez non seulement devoir recréer tout votre contenu, mais aussi toute la structure de votre site web. Il est donc conseillé de mettre en place des stratégies de sauvegarde robustes pour éviter de tels désagréments.

Le véritable problème est lorsque vous travaillez avec un autre membre d'équipe, et que vous ajoutez des champs pour affecter la base de données, votre paire devra recréer vos champs et configurations de son côté. Et va s'en suivre une chasse aux oublis, des heures de travail perdues, et une frustration générale.

Il faudrait alors une méthode pour synchroniser ou utiliser une base de données distante, ce qui peut ralentir le processus de création. L'utilisation d'outils de gestion de version, comme Git, peut également être une solution viable pour suivre et gérer les changements de manière plus efficace.

Enregistrer les champs par programmation

L'autre méthode consiste à déclarer les champs de manière programmatique. Cela signifie que vous devrez créer des champs, qui seront importés dans votre thème, qui créeront les champs et les attacheront à la bonne partie de votre thème (page, options, etc.).

Pour vous montrer comment procéder, ajoutons un champ sous-titre à toutes les pages.

D'abord, créons un nouveau fichier, appelé acf-page.php dans /themes/demo/includes/custom-fields et dans votre functions.php, ajoutez simplement une boucle à l'intérieur du dossier includes pour enregistrer tous les fichiers.

// acf-page.php

/**
 * This function registers a new ACF field group with a single text field for subtitles.
 * The field group is displayed on all pages (post_type == "page") in the WordPress admin,
 * appearing after the title section (acf_after_title) with labels placed to the left.
 *
 * Hooked to the 'acf/init' action, it's executed during the ACF initialization process.
 */
add_action( 'acf/init', 'register_allpage_fields' );
function register_allpage_fields() {
  $slug = "allpage";

  $fields = [
    [
      'key'       => 'page_subtitle',
      'label'     => 'Subtitle',
      'name'      => 'page_subtitle',
      'type'      => 'text',
    ],
  ];

  acf_add_local_field_group([
    'key' => "group_$slug",
    'title' => 'Options',
    'position'=> 'acf_after_title',
    'label_placement'   => 'left',
    'fields' => $fields,
    'location' => [
      [
        [
          'param' => 'post_type',
          'operator' => '==',
          'value' => "page",
        ]
      ]
    ]
  ]);
}
// functions.php

/**
 * Import Custom Fields
 *
 * @see Import any custom acf fields in `includes/custom-fields` folder
 * @warning Required ACF Pro to be installed!
 */
foreach (glob(get_template_directory() . '/includes/custom-fields/*.php') as $file) {
  $filename = basename($file);
  require_once locate_template('/includes/custom-fields/' . $filename);
}

Ainsi, si vous allez dans une de vos pages, le champ Subtitle apparaîtra!

L'inconvénient de cette méthode est que vous devrez consulter la documentation plus souvent avant de vous y habituer. Mais au final, cela accélérera tout votre processus de développement et vous rapprochera d'une approche collaborative. De plus, cela favorise une meilleure organisation du code, facilitant ainsi la maintenance et les mises à jour futures du site.