使用Wordpress中的Ajax按类别过滤循环

时间:2012-05-07 14:32:46

标签: ajax wordpress loops categories

好吧,我一直在寻找几个小时和几个小时,似乎有很多方法可以做到这一点,因为我之前从未使用过Ajax并且对havascript知之甚少,对我来说它变得太难了。

我在首页(索引)或wordpress上有循环,我希望有一个过滤器,一个包含不同类别的下拉菜单,单击时,同一屏幕中显示的唯一帖子是该类别中的帖子。我需要使用ajax刷新循环,因此在使用过滤器时整个页面仍保持完整。

这就是我在索引文件中的内容:

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery", "1.2.6")</script>
<script type="text/javascript">
$(function(){
     $('#main_cat').change(function(){
         var $mainCat=$('#main_cat').val();
          $("#sub_cat").empty();
              // call ajax
                  $.ajax({

              url:"<?php bloginfo('wpurl'); ?>/wp-admin/admin-ajax.php",       
              type:'POST',
              data:'action=my_special_ajax_call&main_catid=' + $mainCat,
              success:function(results)
              {
            //  alert(results);
              $('#sub_cat *').fadeOut(500);
              $('#sub_cat + p').fadeOut(500);
              $("#sub_cat").append(results);
                  $('#sub_cat').load('http://localhost:8888/public_html/wp-content/themes/twentyten-child/templateloop.php');
              $('#sub_cat + p').fadeIn(1);
                  }
                      });

            }
    );
});

类别的下拉列表如下:

<?php
wp_dropdown_categories('show_count=0&selected=-1&hierarchical=1&depth=1&hide_empty=0&exclude=1&show_option_none=Main Categories&name=main_cat');
?>

因此,下拉列表有效,并且它应该是ajax加载wp模板文件,其中查询只过滤一个类别(从wp_dropdown_categories中获取)。如果我在templateloop.php文件中有一个虚拟文本,加载工作正常,但是当我有wp查询时,没有任何反应。 #sub_cat div,这是循环所在的位置,应该由模板文件切换,只是消失了所有的帖子列表,我只留下了页面的上半部分(直到#sub_cat div曾经是)。

有如此多的试验和错误,我已尝试使用模板文件中的查询调用,在索引文件中,在函数中,我似乎永远不会得到任何结果。

在我的functions.php文件中我得到了这个:

function implement_ajax() {
if(isset($_POST['main_catid']))
            {
              echo '<?php $paged = (get_query_var("paged")) ? get_query_var("paged") : 1; query_posts("cat='.$_GET['maincatid'].'&paged=$paged"); ?>';

            die();
            } // end if
}
add_action('wp_ajax_my_special_ajax_call', 'implement_ajax');
add_action('wp_ajax_nopriv_my_special_ajax_call', 'implement_ajax');//for users that are not logged in.

以及我之前使用的查询行,在索引文件中是:

       <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
 query_posts("cat=1,2,3,4,5&paged=$paged"); ?>

我尝试过使用wp_query,但它无处可去,我真的需要指导。任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

这比它需要的更复杂。您根本不需要其他查询或AJAX。如果您的主题正在使用post_class()功能,那么您的帖子都会包含与您的类别相关联的类。这些类是前缀为&#39;类别的类别名称 - &#39; - &#39; category-uncategorized&#39;,例如。您真正需要做的就是根据这些类显示和隐藏帖子。

我没有专门针对您的情况编写任何内容,但我已经使用一些非常大的搜索结果(有时每页400或更多)完成了这项工作,而且效果非常好。这是一个想法:使用jQuery来观看您的选择菜单。你想要change。当选择更改时,解析信息以计算类别(我不知道其标记中包含wp_dropdown_categories()包含的信息。),show()所选类别和{{3}其他一切。