Я попытался программно сгенерировать результаты магазина с помощью локатора магазинов WP, в основном то, что я сделал, это то, что я создал кнопку для каждого города, используя elementor. когда пользователь нажимает кнопку города, мой код устанавливает соответствующий почтовый индекс, радиус и значение количества результатов, и таким образом я получаю список магазинов в этом городе без каких-либо проблем.
Проблема возникает, когда Пользователь вводит почтовый индекс и сначала выполняет поиск, после этого, если пользователь пытается найти магазины в городе, щелкнув эту кнопку города, результаты не отображаются, потому что локатор магазинов не считывает почтовый индекс, предоставленный программно. Я не знаю, почему средство поиска магазинов WP не считывает почтовый индекс, пожалуйста, предоставьте решение этой проблемы. Код, который я использовал, прилагается ниже.
const data = {
cities: {
austin: {
center: '78702'
},
houston: {
center: '77080'
},
sanAntonio: {
center: '78217'
},
},
radius: '30',
results: '40',
};
const previousValues = {
selectedCityPos: 0,
radius: '5',
results: '20',
center: '',
}
function getCityPos(cityId){
return Object.keys(data.cities).findIndex(cityId);
}
function setCityCheckedState(pos, checkedState){
const checkBox = document.querySelectorAll('#wpsl-checkbox-filter input[type=checkbox]')[pos] || {};
checkBox.checked = checkedState;
previousValues.selectedCityPos = pos;
}
function setSearchRadius(miles) {
const elem = document.querySelector('#wpsl-radius span.wpsl-selected-item');
previousValues.radius = elem['data-value'];
elem.setAttribute('data-value', miles);
}
function setSearchResults(count) {
const elem = document.querySelector('#wpsl-results span.wpsl-selected-item');
previousValues.results = elem['data-value'];
elem.setAttribute('data-value', count);
}
function setSearchLocation(zipCode){
const elem = document.getElementById('wpsl-search-input');
previousValues.center = elem.value;
elem.value = zipCode;
elem.dispatchEvent(new Event("input"));
elem.dispatchEvent(new Event('keyup', {keyCode: 13}));
}
function searchStores(){
const link = document.getElementById('wpsl-search-btn');
const clickEvent = new MouseEvent("click", {
"view": window,
"bubbles": false,
"cancelable": true
});
link.dispatchEvent(clickEvent);
}
function revertValues(){
const {selectedCityPos, radius, results, center} = previousValues;
setCityCheckedState(selectedCityPos, false);
setSearchRadius(radius);
setSearchResults(results);
setSearchLocation(center);
}
function attachCityClickListeners(){
//cities should be in sorted order
data.cities = Object.fromEntries(Object.entries(data.cities).sort());
//query all city button elements from DOM
const buttons = document.querySelectorAll('section.elementor-element-a089118 p');
buttons.forEach((button, i) => {
//for each button attach a click listener
button.addEventListener('click', (elem)=>{
//1. check this city
setCityCheckedState(i,true);
//2. set radius to max
setSearchRadius(data.radius);
//3. set results to max
setSearchResults(data.results);
//4. set a zip code as a center point for this city
setSearchLocation(Object.values(data.cities)[i].center);
//5. search stores
setTimeout(()=>searchStores(), 1500);
//6. revert values after a short delay to allow form event to capture new values
setTimeout(()=>{
revertValues();
}, 500);
});
});
}
attachCityClickListeners();