настройка локатора магазинов WP - PullRequest
1 голос
/ 28 мая 2020

Я попытался программно сгенерировать результаты магазина с помощью локатора магазинов 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...