ajax - 在 Wordpress 中使用 Ajax 按类别过滤循环

标签 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,但它毫无用处,我真的需要指导。任何帮助表示赞赏。谢谢。

最佳答案

这比需要的更复杂。您根本不需要额外的查询或 AJAX。如果您的主题使用 post_class()功能正常,您的帖子都有与您的类别相关的类别。例如,这些类是前面带有“category-”--“category-uncategorized”的类别名称。您真正需要做的就是根据这些类别显示和隐藏帖子。

我没有专门针对您的情况编写任何内容,但我已经对一些非常大的搜索结果(有时每页 400 或更多)执行了此操作,而且效果很好。想法如下:使用 jQuery 来观看您的选择菜单。您想要change 。当选择更改时,解析信息以计算出类别(我不知道 wp_dropdown_categories() 在其标记中包含哪些信息。),show()所选类别和 hide()其他一切。

关于ajax - 在 Wordpress 中使用 Ajax 按类别过滤循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10483925/

相关文章:

javascript - 从服务器返回 Javascript 对象

mysql - 无法与 MacOS 上运行的 MySQL 建立连接

jquery - 我可以在中止前一个 ajax 请求后立即启动新的 ajax 请求吗?

javascript - 按空格分割字符串

wordpress - Woocommerce 用自定义按钮/链接替换“添加到购物车”按钮

wordpress - 如何获得woocommerce中最受欢迎产品的类别列表

java - 如何在增强的 for 循环中捕获异常并重新启动该循环的进程?

javascript - 在循环中使用 setTimeout

javascript - 当数字未知时,有没有办法遍历所有 jwplayer 实例?

javascript - 创建带空格的 ID