В худшем случае вы вызываете get_post_meta отдельные идентификаторы постов, которые не были получены WordPress ранее. В этом случае каждый вызов get_post_meta приведет к одному запросу.
var sortposition = document.getElementById("block_sort").value;
let save_sort_position = sortposition; //сюда попадает переменная выше
setInterval(()=>{
if (save_sort_position != sortposition) { //тут переменная та что выше проверяется
var sortposition = document.getElementById("block_sort").value; // этой строки не было, соответсвенно строка ниже не чего не получала (undefined)
save_sort_position = sortposition; // проблема была в этой строке, в неё значение
//переменной не попадало
//соответсвенно конструкция ниже пыталась обработать (undefined)
function syncIndexes(positions) {
const lis = [...document.querySelectorAll('ul > li')]
positions.split('|').forEach((pos, i) => {
lis.find(li => li.dataset.id == pos).querySelector('input').value = i
})
}
syncIndexes(sortposition);
}
}, 100);
const sortPosition = document.getElementById("block_sort").value;
let save_sort_position = sortPosition;
setInterval(()=>{
if (save_sort_position != sortPosition) { //Переменная изменилась
save_sort_position = sortPosition;
// Вызываем нужную функцию или прямо тут добавляем код
function syncIndexes(positions) {
const lis = [...document.querySelectorAll('ul > li')]
positions.split('|').forEach((pos, i) => {
lis.find(li => li.dataset.id == pos).querySelector('input').value = i
})
}
syncIndexes(sortPosition);
}
}, 100);
$('.save_index').click(function(){
const sortPosition = document.getElementById("block_sort").value;
function syncIndexes(positions) {
const lis = [...document.querySelectorAll('ul > li')]
positions.split('|').forEach((pos, i) => {
lis.find(li => li.dataset.id == pos).querySelector('input').value = i
})
}
syncIndexes(sortPosition);
});
var options = {
group: 'Block',
sort: true,
animation: 100,
onEnd: function (/**Event*/evt) {
evt.oldIndex; // element's old index within parent
evt.newIndex; // element's new index within parent
evt.oldDraggableIndex;
evt.newDraggableIndex;
},
store: {
/**
* Get the order of elements. Called once during initialization.
* @param {Sortable} sortable
* @returns {Array}
*/
get: function (sortable) {
//var order = localStorage.getItem(sortable.options.group.name);
var order = document.getElementById("block_sort").value;
const sortPosition = order;
function syncIndexes(positions) {
const lis = [...document.querySelectorAll('ul > li')]
positions.split('|').forEach((pos, i) => {
lis.find(li => li.dataset.id == pos).querySelector('input').value = i
})
}
syncIndexes(sortPosition)
return order ? order.split('|') : [];
},
/**
* Save the order of elements. Called onEnd (when the item is dropped).
* @param {Sortable} sortable
*/
set: function (sortable) {
var order = sortable.toArray();// список сортировки
$( '.block_sort' ).val(order.join('|')); // передача списка сортировки в input(array)
//localStorage.setItem(sortable.options.group.name, order.join('|'));
}
}
};
events = [
'onChoose',
'onStart',
'onEnd',
'onAdd',
'onUpdate',
'onSort',
'onRemove',
'onChange',
'onUnchoose'
].forEach(function (name) {
options[name] = function (evt) {
console.log({
//'event': name,
//'this': this,
//'item': evt.item,
//'from': evt.from,
//'to': evt.to,
//'oldIndex': evt.oldIndex,
'newIndex': evt.newIndex,
//'newDraggableIndex': evt.newDraggableIndex,
//'index': $(this).index()
});
//$('li.list-group-item').click(function(){
//$('#save_storage').click(function(){
//document.getElementById('storage_order').value = localStorage.getItem('Block');
//});
//$('li.list-group-item').click(function(){
//document.getElementById('storage_order').value = $(this).index();
//});
};
});
Sortable.create(block, options);
var order = document.getElementById("block_sort").value; // как заставить обновить все индексы при изменении содержания этого инпута без перезагрузки страницы?
const sortPosition = order;
function syncIndexes(positions) {
const lis = [...document.querySelectorAll('ul > li')]
positions.split('|').forEach((pos, i) => {
lis.find(li => li.dataset.id == pos).querySelector('input').value = i
})
}
syncIndexes(sortPosition)
Предложенный https://vuetifyjs.com/ru/ слишком сложен для ui фреймворка. + материал дизайн страшный по дефолту, имхо конечно