it-roy-ru.com

Условная загрузка JavaScript на основе расширенных пользовательских полей в сообщении

Я создаю сайт/тему, где контент для публикации создается модульно (в основном, но не исключительно) с помощью гибкого поля содержимого ACF. К этим полям может быть присоединена функциональность JavaScript в общедоступном интерфейсе. Например, вы можете загрузить изображение, к которому применен параллакс, или текстовый блок, к которому применена анимация щелчка или наведения. Я пытаюсь определить наиболее полезный метод для условной загрузки различных библиотек JavaScript, которые могли бы использовать эту функциональность (в публикации, по мнению общественности, я не говорю о стороне администратора). В частности, я стараюсь всегда избегать загрузки всего, вместо этого я надеюсь загрузить определенные библиотеки на основе полей, фактически присутствующих в посте. Есть ли установленный способ, за пределами метода грубой силы, циклически повторять содержимое несколько раз, чтобы сначала проверить поля, а затем просмотреть их?

2
jshwlkr

В ACF есть тонко детализированные фильтры для полей при их загрузке.

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;
}

Обычно все скрипты должны быть поставлены в очередь в wp_enqueue_scripts hook. Поэтому вы должны убедиться, что ваш скрипт и его зависимости (которые еще не были загружены) могут быть загружены в нижний колонтитул. Таким образом, ваш скрипт ставится в очередь при доступе к полям в контенте.

3
JHoffmann

Я бы предложил использовать True/False в ACF, чтобы определить, следует ли загружать сценарии, на которые вы ссылаетесь. И создайте функцию для этих конкретных сценариев, чтобы загрузить их, если "True". Что-то вроде этого...

<?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