WordPress AJAX过滤器:为不同的输出样式创建两个循环?

时间:2019-04-04 作者:Thomas Tromp

我有两个不同的页面,带有过滤器。这两个页面具有不同的布局和样式。

对于一个页面,我有三个不同的过滤器,其中输出和样式是相同的。

对于“新闻过滤器”,我需要一种不同的样式。所以我想我需要另一个循环?

如何输出两个不同的循环?我当前的功能。php是:

function misha_filter_function(){
  $args = array(
   \'orderby\' => \'date\', // we will sort posts by date
   \'order\' => $_POST[\'date\'] // ASC или DESC
  );

  $args = array(
    \'tax_query\' => array(
      \'relation\' => \'AND\',
      array(
        \'taxonomy\' => \'post_tag\',
        \'field\' => $cat_id,
        \'terms\' => $_POST[\'ownerfilter\'],
      ),
      array(
        \'taxonomy\' => \'post_tag\',
        \'field\' => $cat_id,
        \'terms\' => $_POST[\'locationfilter\'],
      ),
    )
  );

  $args = array(
    \'tax_query\' => array(
      \'relation\' => \'AND\',
      array(
        \'taxonomy\' => \'post_tag\',
        \'field\' => $cat_id,
        \'terms\' => $_POST[\'newsfilter\'],
      ),
    )
  );

  $relation = \'AND\';
    if( isset( $_POST[\'timefilter\'] ) )
        $args[\'tax_query\'] = array(
            \'relation\' => $relation,
            array(
                \'taxonomy\' => \'post_tag\',
                \'field\' => $cat_id,
                \'terms\' => $_POST[\'timefilter\']
            ),
        );

    $query = new WP_Query( $args );

    if( $query->have_posts() ) :
        while( $query->have_posts() ): $query->the_post(); ?>
    <!-- post -->
    <a href="<?php the_permalink()?>">
      <div class="col-md-3 col-sm-6 ver-item">
        <?php $thumb = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), \'full\' );?>
        <div class="thumb" style="background-image:url(\'<?php echo $thumb[\'0\'];?>\');"></div>
        <section>
          <time><?php echo get_the_date();?></time>
          <h3><?php the_title();?></h3>
          <span><!-- underline --></span>
        </section>
      </div>
    </a>

        <?php endwhile;
        wp_reset_postdata(); else :
        echo \'Geen resultaten, probeer het opnieuw.\';
    endif;
    die();
  }

add_action(\'wp_ajax_myfilter\', \'misha_filter_function\');
add_action(\'wp_ajax_nopriv_myfilter\', \'misha_filter_function\');
“newsfilter”的筛选结果需要获得不同的输出和样式。我该怎么做?

提前感谢,

托马斯。

我尝试将$args改为另一个名称,但没有成功。我还尝试添加一个全新的函数(news\\u filter\\u函数而不是misha\\u filter\\u函数)。

2 个回复
SO网友:Javi Torre Sustaeta

我知道您希望返回两个不同的具有相同功能的对象。如果我所理解的是正确的,那么:

使用javascript ajax函数,您可以传递一个var来保存需要正确循环的页面,并且可以在misha\\u filter\\u函数()中检查该var的内容,以响应一个或另一个循环。

现在可以为每个循环添加不同的样式。

我建议您将输出的html标记保存在变量中($output=…)最后,您应该使用echo$输出。

如果这不是你想要的答案,你可以在评论中加以澄清。

SO网友:Thomas Tromp

我会试试的,但我的php没有那么好。你能解释一下我应该如何应用它或给我举个例子吗?

我的Ajax是:

jQuery(function($){
    $(\'#filter\').submit(function(){
        var filter = $(\'#filter\');
        $.ajax({
            url:filter.attr(\'action\'),
            data:filter.serialize(), // form data
            type:filter.attr(\'method\'), // POST
            beforeSend:function(xhr){
                filter.find(\'button\').text(\'Filteren..\'); // changing the button label
            },
            success:function(data){
                filter.find(\'button\').text(\'Filter\'); // changing the button label back
                $(\'.verleden-container .row .container .row\').html(data); // insert data
            }
        });
        return false;
    });

    $(\'#timefilter\').submit(function(){
        var filter = $(\'#timefilter\');
        $.ajax({
            url:filter.attr(\'action\'),
            data:filter.serialize(), // form data
            type:filter.attr(\'method\'), // POST
            beforeSend:function(xhr){
                filter.find(\'#timefilterbutton\').text(\'Filteren..\'); // changing the button label
            },
            success:function(data){
                filter.find(\'#timefilterbutton\').text(\'Filter\'); // changing the button label back
                $(\'.verleden-container .row .container .row\').html(data); // insert data
            }
        });
        return false;
    });
});
我应该更改/添加什么文件?

托马斯

相关推荐

控制台中没有错误,但AJAX调用似乎不起作用

尝试使用动态过滤器,该过滤器将通过单击按钮按自定义分类法过滤自定义帖子类型。是得到了一个错误的ajax\\u url是未定义的,但我想我已经解决了这一部分。。。然而,我现在剩下的东西仍然不起作用,但没有错误!我希望所有产品在默认情况下显示,然后按应用程序和分析器对其进行过滤functions.php 文件: function ajax_filter_tests_scripts() { wp_enqueue_script( \'ajax_filter_tests\', get_styl