web-dev-qa-db-fra.com

Chargement conditionnel de JavaScript en fonction des champs personnalisés avancés de l'article

Je construis un site/thème où le contenu de publication est créé de manière modulaire (principalement, mais pas exclusivement) avec le champ de contenu flexible d'ACF. La fonctionnalité JavaScript peut être associée à ces champs sur le système frontal public. Vous pouvez avoir un téléchargement d'image auquel une parallaxe est appliquée ou un bloc de texte auquel un clic ou une animation de survol est appliqué, par exemple. J'essaie de déterminer la méthode la plus utile pour charger de manière conditionnelle les différentes bibliothèques JavaScript susceptibles d'alimenter cette fonctionnalité (dans l'article, comme le public le voit, je ne parle pas du côté de l'administrateur). Plus précisément, j'essaie d'éviter de toujours tout charger, j'espère plutôt charger des bibliothèques spécifiques basées sur les champs réellement présents dans le message. Existe-t-il un moyen établi, en dehors de la méthode de force brute, de parcourir le contenu à plusieurs reprises pour vérifier d'abord les champs, puis pour les afficher ensuite?

2
jshwlkr

ACF a des filtres _ de grain fin pour les champs quand ils sont chargés.

add_action( 'wp_enqueue_scripts', 'register_my_scripts', 5 );
function register_my_scripts() {
    wp_register_script( 'my-script', 'path-to/my-script.js', array(), 'version', true );
}

add_filter('acf/load_field/name=my_field_name', 'load_field_my_field_name');
function load_field_my_field_name( $field ) {
    wp_enqueue_script( 'my-script' );
    return $field;
}

Normalement, tous les scripts doivent être mis en file d'attente dans le hook wp_enqueue_scripts. Vous devez donc vous assurer que votre script et ses dépendances (qui n'ont pas encore été chargés) peuvent être chargés dans le pied de page. Ainsi, votre script est mis en file d'attente lors de l'accès aux champs dans le contenu.

3
JHoffmann

Je suggérerais d’utiliser True/False dans ACF pour déterminer si vous devez charger les scripts que vous référencez. Et créez une fonction pour ces scripts spécifiques afin de les charger si "True". Quelque chose comme ça...

<?php

  if( get_field('true_false_field') ) { 
    add_action( 'wp_enqueue_scripts', 'enqueue_the_script' );
  }

  function enqueue_the_script() {
    wp_enqueue_script( 'my-js', 'filename.js', false );
  }

?>
2
lavekyl