Обработка нескольких данных / параметров, которые изменяются в Ajax - Wordpress - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь отфильтровать пользовательский тип записи, называемый подкастами, с помощью ajax, используя два идентификатора пользовательских таксономий в качестве параметров, жанра и страны.

Это внешний интерфейс: https://imgur.com/a/G2vB62q.

Каквы можете видеть, я могу выбрать жанр или / и страну для использования в качестве фильтра для моих сообщений (ниже есть массив с параметрами, которые передаются).

На моей странице подкаста у меня есть два foreach,со ссылкой внутри, с именем и term_id.

foreach ($genre/$country as $category) {
    echo '<a class="button-prova/button-prova2 premuto2"
    name="keyword/keyword2" id="keyword/keyword2" 
     value="'.$category->term_id.'" 
     href="#">'.$category->name.'</a>';   
} 

Затем в файле function.php у меня есть функция ajax и ajax-fetch.

$( document ).ready(function() {
    $(document).on("click touchend", ".premuto, .premuto2", function () {
    fetch(this);
    });
});
function fetch(prova){
    if($(prova).attr('name') == 'keyword'){
        var1 = $(prova).attr('value') ? jQuery(prova).attr('value') : 0;
    } else
          {
             var2 = $(prova).attr('value') ? jQuery(prova).attr('value') : 0;
          }
    jQuery.ajax({
        url: '<?php echo admin_url('admin-ajax.php'); ?>',
        type: 'post',
        data: { action: 'data_fetch', keyword: [var1,var2] },
        success: function(data) {
            jQuery('#datafetch').html( data );
        }
    });
}

Сначала, когда явыберите один жанр, страна установлена ​​на 0, как вы видите в коде.Но когда я выбираю другую таксономию, жанр устанавливается на 0 (или наоборот, как на картинке).Есть ли способ сохранить мой прецедентный выбор?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Так как вы используете AJAX.Ранее выбранное значение сохранится, если вы объявите переменную вне функций.Попробуйте это.

var keywords = {};//Put this line outside of the function, so it available globally
$(document).ready(function() {
    $('.premuto, .premuto2').on("click", function () {
        keywords[$(this).attr('name')] = $(this).attr('value');
        fetch();
    });
});

function fetch(){
    jQuery.ajax({
        url: '<?php echo admin_url('admin-ajax.php'); ?>',
        type: 'post',
        data: { 'action': 'data_fetch', 'keywords': keywords },
        success: function(data) {            
        }
    });
}

Переменная ключевых слов будет выглядеть следующим образом:

{keyword:0,keyword2:4}

И будет считываться как ассоциативный массив на стороне PHP.

Дополнительнопримечание: использование глобальных переменных javascript может привести к конфликту имен переменных из других скриптов / плагинов.Чтобы исправить это, вы можете инкапсулировать все свои скрипты внутри самовозвратной функции, например:

(function(){ 
    /*PUT YOUR PLUGIN SCRIPTS HERE*/ 
})();
0 голосов
/ 19 февраля 2019

Кнопки, которые вы используете для фильтрации, имеют определенную разметку (вероятно, класс) при нажатии.Вы можете использовать этот класс в качестве переключателя.В вашей функции 'fetch' вы можете сделать:

keywords = Array();
$('.filters.toggle').each(function(){ // all filters with the toggle class
    // add those values to the keywords array
    keywords.push($(this).val()); // .val() is the same as attr('value')
});

ключевые слова будут массивом всех жанров, стран, на которые переключаются.

затем:

data: { action: 'data_fetch', keyword: keywords},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...