В настоящее время у меня есть такой сценарий:
<?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.
Я знаю, что, вероятно, иду неправильным путем, поэтому я полностью открыт для предложения, если кто-нибудь знает лучший и более чистый способ подойти к этому.
Куда бы это пошло конкретно? В шлейфе foreach или еще где?
Я думаю, вы говорите о том, чтобы не выводить JS-код на страницу повторно, а не выполнять его повторно? Поместите существующий материал JS в функцию JS, которую вы разместите в другом месте, вне цикла. Сделайте так, чтобы он принимал один аргумент в качестве входных данных для функции. Затем в блоке сценария внутри цикла единственный JS, который вам нужен, - это вызов этой функции, в которой вы передаете $ things в качестве аргумента. Тогда у вас есть функция, написанная один раз, но вызываемая много раз. В конце концов, для этого и нужны функции ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте 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>
На самом деле это работает как задумано, спасибо! Я буду продолжать возиться с этим, потому что у меня может быть больше данных, которые в конечном итоге могут быть получены из этого.
Мне нравится максимально отделять 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>
Аааа, да. Это тоже то, о чем я думал. Способ перебрать массив, но сохранить его в переменной. Это помогает, спасибо!
Если вы хотите, чтобы он выполнялся только один раз, используйте флаг (
$has_executed = false), который можно переключать.