Использование скрипта jQuery с циклом foreach в WordPress

В настоящее время у меня есть такой сценарий:

<?php $test = get_categories('taxonomy=item&type=things');?>

    <?php foreach($test as $stuff) : ?>
        <script type = "text/javascript">
        jQuery(document).ready(function($) {
          var $things = <?php echo json_encode($stuff->name); ?>;
          console.info($things);
          $(".element").each(function() {
            var $state = $(this).attr("title");
            if ($things.indexOf($state) > -1) {
              $(this).addClass('current');
            }
          });
        });
        </script>
    <?php endforeach; ?>

Это работает, но я не уверен, как вывести его из цикла foreach, чтобы он не повторял сценарий jQuery снова и снова.

В целом, я пытаюсь получить значения из get_categories через WordPress, но затем передаю значение name из массива, а затем проверяю это в jQuery, чтобы добавить класс к определенным элементам в div.

Я знаю, что, вероятно, иду неправильным путем, поэтому я полностью открыт для предложения, если кто-нибудь знает лучший и более чистый способ подойти к этому.

Если вы хотите, чтобы он выполнялся только один раз, используйте флаг ($has_executed = false), который можно переключать.

Script47 22.10.2018 17:39

Куда бы это пошло конкретно? В шлейфе foreach или еще где?

ultraloveninja 22.10.2018 17:51

Я думаю, вы говорите о том, чтобы не выводить JS-код на страницу повторно, а не выполнять его повторно? Поместите существующий материал JS в функцию JS, которую вы разместите в другом месте, вне цикла. Сделайте так, чтобы он принимал один аргумент в качестве входных данных для функции. Затем в блоке сценария внутри цикла единственный JS, который вам нужен, - это вызов этой функции, в которой вы передаете $ things в качестве аргумента. Тогда у вас есть функция, написанная один раз, но вызываемая много раз. В конце концов, для этого и нужны функции ...

ADyson 22.10.2018 17:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
597
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте array_column (), чтобы получить все имена. Не проверенный код ниже

<?php 
$test = get_categories('taxonomy=item&type=things');
$names = array_column($test, 'name'); ?>

<script type = "text/javascript">
jQuery(document).ready(function($) {
  var $things = <?php echo json_encode($names); ?>;
  console.info($things);
  $(".element").each(function() {
    var $state = $(this).attr("title");
    if ($things.indexOf($state) > -1) {
      $(this).addClass('current');
    }
  });
});
</script>

На самом деле это работает как задумано, спасибо! Я буду продолжать возиться с этим, потому что у меня может быть больше данных, которые в конечном итоге могут быть получены из этого.

ultraloveninja 22.10.2018 18:01

Мне нравится максимально отделять PHP от JS и предотвращать многократные итерации. Итак, я обрабатываю $names в PHP, а затем json_encode для оценки части JS. Код ниже (не проверено).

<?php
  $test = get_categories('taxonomy=item&type=things');

  foreach ($test as $stuff) {
    $names[] = $stuff->name;
  }
?>
<script type = "text/javascript">
  jQuery(document).ready(function($) {
    var $things = <?php echo json_encode($names); ?>;
    console.info($things);
    $(".element").each(function() {
      var $state = $(this).attr("title");
      if ($things.indexOf($state) > -1) {
        $(this).addClass('current');
      }
    });
  });
</script>

Аааа, да. Это тоже то, о чем я думал. Способ перебрать массив, но сохранить его в переменной. Это помогает, спасибо!

ultraloveninja 22.10.2018 18:06

Другие вопросы по теме