Лучший способ загрузить пользовательский файл JS только на страницы продуктов WooCommerce с темой блока (FSE), не хотитеPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Лучший способ загрузить пользовательский файл JS только на страницы продуктов WooCommerce с темой блока (FSE), не хотите

Сообщение Anonymous »

Сначала прочитайте всю информацию
Я работаю над магазином WooCommerce, используя Twenty Twenty-Five в качестве темы дочернего блока (полное редактирование сайта). У меня есть небольшой собственный скрипт (product.js), который следует запускать только на страницах отдельных продуктов, без необходимости загружать его в сообщения блога, архивы, корзину и т. д.

Код: Выделить всё

functions.php:
add_action( 'wp_enqueue_scripts', function() {
if ( is_product() ) {
wp_enqueue_script(
'custom-product',
get_stylesheet_directory_uri() . '/js/product.js',
array( 'jquery' ),
filemtime( get_stylesheet_directory() . '/js/product.js' ),
true
);
}
} );
Это работает, но меня беспокоит кэширование. На сайте используется LiteSpeed ​​Cache с полностраничным кэшированием (и Cloudflare APO). Несмотря на то, что is_product() проверяет условие, кэшированный HTML может по-прежнему включать тег на страницах, не связанных с продуктом, если первый посетитель был на продукте.
Я читал, что темы блоков обрабатывают загрузку скриптов по-другому (отложенно через рендеринг wp_head/wp_footer), и существует wp_enqueue_block_script(), но я не могу понять, как сделать его условным на основе is_product().
Что мне нужно:
  • Загружать product.j только тогда, когда is_product() истинно
  • Нет логики PHP в выводе HTML (поэтому полностраничный кеш остается чистым)
  • Работает с темами блоков FSE + WooCommerce 9.4+
    Есть ли в этом отношении передовой опыт на 2025 год? Может быть, использовать wp_register_script + какой-нибудь атрибут данных или более разумный способ с дескрипторами блочных сценариев? Хотелось бы получить чистый, удобный для кэширования пример, если он у кого-нибудь есть.
    Заранее спасибо


Подробнее здесь: https://stackoverflow.com/questions/798 ... th-a-block
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»