Как я могу передать текущий термин после таксономии, используя ajax? - PullRequest
0 голосов
/ 27 мая 2019

Я создаю фильтр для нестандартного типа записей WordPress.Я хочу иметь возможность динамически отображать больше сообщений с помощью раскрывающегося списка.Это отлично работает.Проблема в том, что я могу заставить его работать, только если я жестко закодирую термин таксономии.Я хотел бы иметь возможность передавать термин динамически в зависимости от количества постов на странице, которые выбрал пользователь.

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

$args = array(
            'post_type' => 'products',
            'posts_per_page' => $_POST['ppp'],
            'tax_query' => array(
                array(
                    'taxonomy' => 'product-category',
                    'field'    => 'slug',
                    'terms'    => 'terminals'
                ),
            ),
        );
<form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="filter">
    <select name="ppp">
        <option value="1">Show 12 Per Page</option>
        <option value="2">Show 24 Per Page</option>
        <option value="3">Show 48 Per Page</option>
        <option value="-1">Show All</option>
    </select>
    <!-- <div id = "spinner"></div> -->
    <input type="hidden" name="action" value="myfilter">
</form>
$('#filter').change(function() {
        var filter = $('#filter');
        $.ajax({
            url:filter.attr('action'),
            data:filter.serialize(),
            type:filter.attr('method'),
            beforeSend:function(xhr){
                //show the spinner
            },
            success:function(data){
                //hide the spinner
                $('#response').html(data);
            }
        });
        return false;
    });

Я хотел бы иметь возможность получить термин таксономии из текущего поста и передать его функции черезАякс.

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Я закончил тем, что копался в этом немного больше, основываясь на ответе Твисти, и в результате я добавил термин таксономии в качестве скрытого входного значения:

$args = array(
            'post_type' => 'products',
            'posts_per_page' => $_POST['ppp'],
            'tax_query' => array(
                array(
                    'taxonomy' => 'product-category',
                    'field'    => 'slug',
                    'terms'    => $_POST['term']
                ),
            ),
        );
<form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="tax-filter">
                            <label>
                            <select name="ppp">
                                <option value="12">Show 12 Per Page</option>
                                <option value="24">Show 24 Per Page</option>
                                <option value="48">Show 48 Per Page</option>
                                <option value="-1">Show All</option>
                            </select>
                            <?php //get the post taxonomy term
                            $obj = get_queried_object(); ?>
                            <input type="hidden" name="term" value="<?php echo $obj->slug; ?>">
                            <input type="hidden" name="action" value="myfilter">
                        </form>
$('#tax-filter').change(function() {
    var filter = $('#tax-filter');
    $.ajax({
        url:filter.attr('action'),
        data:filter.serialize(),
        type:filter.attr('method'),
        beforeSend:function(xhr){
            $('#spinner').toggle();
        },
        success:function(data){
            $('#spinner').toggle();
            $('#sortedPosts').html(data);
        }
    });
    //debugging
    //console.log(filter.attr('method'));
    return false;
});
0 голосов
/ 27 мая 2019

Я думаю, что ваш селектор немного выключен. Пожалуйста, примите во внимание следующее:

$(function() {
  $("#filter select").change(function() {
    $(this).parent().submit();
  });
  $("#filter").submit(function(e) {
    e.preventDefault();
    var $f = $(this);
    $.ajax({
      url: $f.attr("action"),
      data: {
        ppp: parseInt($("select", $f).val())
      },
      dataType: "html",
      method: "POST",
      beforeSend: function(xhr) {
        //show the spinner
      },
      success: function(data) {
        //hide the spinner
        $('#response').html(data);
      }
    });
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action="./wp-admin/admin-ajax.php" method="POST" id="filter">
  <select name="ppp">
    <option value="1" selected>Show 12 Per Page</option>
    <option value="2">Show 24 Per Page</option>
    <option value="3">Show 48 Per Page</option>
    <option value="-1">Show All</option>
  </select>
  <!-- <div id = "spinner"></div> -->
  <input type="hidden" name="action" value="myfilter">
</form>

Когда пользователь изменяет select, форма отправляется. Отправка формы выполняет AJAX.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...